作成日: 2019/04/04 最終更新日: 2019/04/04
文書種別
使用方法
詳細
C1FlexGridのComboListプロパティにパイプ文字(|)で区切ったテキストを設定することで、ドロップダウン項目を設定できます。このとき、項目数が多くなる(例:5000個)につれて、プルダウンの▼をクリックしてドロップダウン項目が表示されるまでの時間が大幅に掛かるようになり、パフォーマンスが低下するといった現象が発生することがあります。
これを回避ける手段として、標準のComboBoxをC1FlexGridの列のエディタとして用いる方法が考えられます。なお、このComboBoxに項目を設定するには次の2通りがありますので、必要に応じて使い分けることが可能です。
(1)ComboBoxのItems.AddRangeメソッドで、List型の項目を追加する
(2)ComboBoxのDataSourceプロパティに、List型の項目を設定する
なお回避方法(1)場合、初回のドロップダウンにかかる時間が2回目以降よりも若干長くなります。これは、標準のComboBoxでのコントロール作成タイミングなどに関連した内部実装によるものと推定されます。この場合「ComboBoxに項目を追加した直後に、CreateControlメソッド呼び出すことで改善が見られます。
以下に、上述の2つの回避方法を実装するコードを記載しますので、ご参照ください。
◎サンプルコード(VB)
◎サンプルコード(C#)
これを回避ける手段として、標準のComboBoxをC1FlexGridの列のエディタとして用いる方法が考えられます。なお、このComboBoxに項目を設定するには次の2通りがありますので、必要に応じて使い分けることが可能です。
(1)ComboBoxのItems.AddRangeメソッドで、List型の項目を追加する
(2)ComboBoxのDataSourceプロパティに、List型の項目を設定する
なお回避方法(1)場合、初回のドロップダウンにかかる時間が2回目以降よりも若干長くなります。これは、標準のComboBoxでのコントロール作成タイミングなどに関連した内部実装によるものと推定されます。この場合「ComboBoxに項目を追加した直後に、CreateControlメソッド呼び出すことで改善が見られます。
以下に、上述の2つの回避方法を実装するコードを記載しますので、ご参照ください。
◎サンプルコード(VB)
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
C1FlexGrid1.ShowButtons = C1.Win.C1FlexGrid.ShowButtonsEnum.Always
C1FlexGrid1.Cols.Count = 4
C1FlexGrid1.Cols(1).Caption = "ComboList"
C1FlexGrid1.Cols(2).Caption = "ComboBox with AddRange"
C1FlexGrid1.Cols(2).Width = 160
C1FlexGrid1.Cols(3).Caption = "ComboBox with Data Source"
C1FlexGrid1.Cols(3).Width = 180
Dim items As List(Of String) = New List(Of String)
Dim i As Integer = 1
Do While (i <= 5000)
items.Add("Item #{i}")
i = (i + 1)
Loop
' ****1列目:組み込みのComboList****
C1FlexGrid1.Cols(1).ComboList = String.Join("|", items)
'****2列目:MS ComboBox(AddRange)****
Dim comboBox1 As ComboBox = New ComboBox
comboBox1.Items.AddRange(items.ToArray)
comboBox1.CreateControl() '初回ドロップダウン時のパフォーマンス改善
C1FlexGrid1.Cols(2).Editor = comboBox1
' ****3列目:MS ComboBox(DataSource)****
Dim comboBox2 As ComboBox = New ComboBox
comboBox2.DataSource = items
C1FlexGrid1.Cols(3).Editor = comboBox2
End Sub
C1FlexGrid1.ShowButtons = C1.Win.C1FlexGrid.ShowButtonsEnum.Always
C1FlexGrid1.Cols.Count = 4
C1FlexGrid1.Cols(1).Caption = "ComboList"
C1FlexGrid1.Cols(2).Caption = "ComboBox with AddRange"
C1FlexGrid1.Cols(2).Width = 160
C1FlexGrid1.Cols(3).Caption = "ComboBox with Data Source"
C1FlexGrid1.Cols(3).Width = 180
Dim items As List(Of String) = New List(Of String)
Dim i As Integer = 1
Do While (i <= 5000)
items.Add("Item #{i}")
i = (i + 1)
Loop
' ****1列目:組み込みのComboList****
C1FlexGrid1.Cols(1).ComboList = String.Join("|", items)
'****2列目:MS ComboBox(AddRange)****
Dim comboBox1 As ComboBox = New ComboBox
comboBox1.Items.AddRange(items.ToArray)
comboBox1.CreateControl() '初回ドロップダウン時のパフォーマンス改善
C1FlexGrid1.Cols(2).Editor = comboBox1
' ****3列目:MS ComboBox(DataSource)****
Dim comboBox2 As ComboBox = New ComboBox
comboBox2.DataSource = items
C1FlexGrid1.Cols(3).Editor = comboBox2
End Sub
◎サンプルコード(C#)
private void Form1_Load(object sender, EventArgs e)
{
c1FlexGrid1.ShowButtons = C1.Win.C1FlexGrid.ShowButtonsEnum.Always;
c1FlexGrid1.Cols.Count = 4;
c1FlexGrid1.Cols[1].Caption = "ComboList";
c1FlexGrid1.Cols[2].Caption = "ComboBox with AddRange";
c1FlexGrid1.Cols[2].Width = 160;
c1FlexGrid1.Cols[3].Caption = "ComboBox with Data Source";
c1FlexGrid1.Cols[3].Width = 180;
List items = new List();
for (int i = 1; i <= 5000; ++i)
{
items.Add($"Item #{i}");
}
// ****1列目:組み込みのコンボリスト****
c1FlexGrid1.Cols[1].ComboList = string.Join("|", items);
// ****2列目:ComboBox(AddRange)****
ComboBox comboBox1 = new ComboBox();
comboBox1.Items.AddRange(items.ToArray());
comboBox1.CreateControl(); //初回ドロップダウン時のパフォーマンス改善
c1FlexGrid1.Cols[2].Editor = comboBox1;
// ****3列目:ComboBox(DataSource)****
ComboBox comboBox2 = new ComboBox();
comboBox2.DataSource = items;
c1FlexGrid1.Cols[3].Editor = comboBox2;
}
{
c1FlexGrid1.ShowButtons = C1.Win.C1FlexGrid.ShowButtonsEnum.Always;
c1FlexGrid1.Cols.Count = 4;
c1FlexGrid1.Cols[1].Caption = "ComboList";
c1FlexGrid1.Cols[2].Caption = "ComboBox with AddRange";
c1FlexGrid1.Cols[2].Width = 160;
c1FlexGrid1.Cols[3].Caption = "ComboBox with Data Source";
c1FlexGrid1.Cols[3].Width = 180;
List
for (int i = 1; i <= 5000; ++i)
{
items.Add($"Item #{i}");
}
// ****1列目:組み込みのコンボリスト****
c1FlexGrid1.Cols[1].ComboList = string.Join("|", items);
// ****2列目:ComboBox(AddRange)****
ComboBox comboBox1 = new ComboBox();
comboBox1.Items.AddRange(items.ToArray());
comboBox1.CreateControl(); //初回ドロップダウン時のパフォーマンス改善
c1FlexGrid1.Cols[2].Editor = comboBox1;
// ****3列目:ComboBox(DataSource)****
ComboBox comboBox2 = new ComboBox();
comboBox2.DataSource = items;
c1FlexGrid1.Cols[3].Editor = comboBox2;
}
旧文書番号
83826