作成日: 2018/04/02 最終更新日: 2018/04/02
文書種別
使用方法
詳細
C1FlexGridの組み込みコンボボックスでは、ドロップダウンリストから項目を選択するのと同時に、選択したデータ値がグリッドに反映されます。ドロップダウン項目の選択時にはCellChangedイベントが発生し、このタイミングでC1FlexGrid(r, c)の値を取得することができます。
しかし、C1ComboBoxや標準のComboBoxなどをカスタムエディタとして使用した場合は、リスト項目を選択してもそのデータ値がグリッドに反映されません。CellChangedイベントは発生せず、代わりにSelectedIndexChangedが発生しますが、この時点ではC1FlexGrid(r, c)の値はヌルになります。
この動作を組み込コンボボックスと同じようにするには、C1ComboBoxなどカスタムのコンボボックスのSelectedIndexChangedイベント内で、C1FlexGridのFinishEditingメソッドを実行し、強制的に編集を終了してください。
以下に、コンボボックスのリスト項目を直接設定したケースおよびデータバインドしたケースについて、サンプルコードを記載します(両ケースとも結果は同じです)。
◎サンプルコード(VB)
◎サンプルコード(C#)
しかし、C1ComboBoxや標準のComboBoxなどをカスタムエディタとして使用した場合は、リスト項目を選択してもそのデータ値がグリッドに反映されません。CellChangedイベントは発生せず、代わりにSelectedIndexChangedが発生しますが、この時点ではC1FlexGrid(r, c)の値はヌルになります。
この動作を組み込コンボボックスと同じようにするには、C1ComboBoxなどカスタムのコンボボックスのSelectedIndexChangedイベント内で、C1FlexGridのFinishEditingメソッドを実行し、強制的に編集を終了してください。
以下に、コンボボックスのリスト項目を直接設定したケースおよびデータバインドしたケースについて、サンプルコードを記載します(両ケースとも結果は同じです)。
◎サンプルコード(VB)
Imports C1.Win.C1FlexGrid
Imports C1.Win.C1Input
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' 1列目:組み込みコンボ(非連結コンボ)
C1FlexGrid1.Cols(1).ComboList = "|A|B|C"
' 2列目:カスタムコンボ(非連結コンボ)
Dim C1ComboBox1 As C1ComboBox = New C1ComboBox
C1ComboBox1.Items.Add("A")
C1ComboBox1.Items.Add("B")
C1ComboBox1.Items.Add("C")
C1FlexGrid1.Cols(2).Editor = C1ComboBox1
Dim dt As DataTable = New DataTable
dt = GetTable
' 3列目:組み込みコンボ(連結コンボ)
C1FlexGrid1.Cols(3).DataMap = New MultiColumnDictionary(dt, "Item")
' 4列目:カスタムコンボ(連結コンボ)
Dim C1ComboBox2 As C1ComboBox = New C1ComboBox
C1ComboBox2.ItemsDataSource = dt
C1ComboBox2.ItemsDisplayMember = "Item"
C1ComboBox2.ItemsValueMember = "Item"
C1ComboBox2.TextDetached = True
C1FlexGrid1.Cols(4).Editor = C1ComboBox2
AddHandler C1ComboBox1.SelectedIndexChanged, AddressOf c1comboBox1_SelectedIndexChanged
AddHandler C1ComboBox2.SelectedIndexChanged, AddressOf c1comboBox2_SelectedIndexChanged
End Sub
Private Sub c1comboBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
C1FlexGrid1.FinishEditing()
End Sub
Private Sub c1comboBox2_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
Console.WriteLine("c1comboBox2_1SelectedIndexChanged")
C1FlexGrid1.FinishEditing()
End Sub
Private Sub C1FlexGrid1_CellChanged(sender As Object, e As RowColEventArgs) Handles C1FlexGrid1.CellChanged
If (C1FlexGrid1(e.Row, e.Col) IsNot Nothing) Then
Console.WriteLine(e.Row.ToString() + " " + e.Col.ToString + " " + C1FlexGrid1(e.Row, e.Col).ToString)
End If
End Sub
Private Shared Function GetTable() As DataTable
Dim table As DataTable = New DataTable
table.Columns.Add("Item", GetType(System.String))
table.Rows.Add("AA")
table.Rows.Add("BB")
table.Rows.Add("CC")
Return table
End Function
End Class
Imports C1.Win.C1Input
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' 1列目:組み込みコンボ(非連結コンボ)
C1FlexGrid1.Cols(1).ComboList = "|A|B|C"
' 2列目:カスタムコンボ(非連結コンボ)
Dim C1ComboBox1 As C1ComboBox = New C1ComboBox
C1ComboBox1.Items.Add("A")
C1ComboBox1.Items.Add("B")
C1ComboBox1.Items.Add("C")
C1FlexGrid1.Cols(2).Editor = C1ComboBox1
Dim dt As DataTable = New DataTable
dt = GetTable
' 3列目:組み込みコンボ(連結コンボ)
C1FlexGrid1.Cols(3).DataMap = New MultiColumnDictionary(dt, "Item")
' 4列目:カスタムコンボ(連結コンボ)
Dim C1ComboBox2 As C1ComboBox = New C1ComboBox
C1ComboBox2.ItemsDataSource = dt
C1ComboBox2.ItemsDisplayMember = "Item"
C1ComboBox2.ItemsValueMember = "Item"
C1ComboBox2.TextDetached = True
C1FlexGrid1.Cols(4).Editor = C1ComboBox2
AddHandler C1ComboBox1.SelectedIndexChanged, AddressOf c1comboBox1_SelectedIndexChanged
AddHandler C1ComboBox2.SelectedIndexChanged, AddressOf c1comboBox2_SelectedIndexChanged
End Sub
Private Sub c1comboBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
C1FlexGrid1.FinishEditing()
End Sub
Private Sub c1comboBox2_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
Console.WriteLine("c1comboBox2_1SelectedIndexChanged")
C1FlexGrid1.FinishEditing()
End Sub
Private Sub C1FlexGrid1_CellChanged(sender As Object, e As RowColEventArgs) Handles C1FlexGrid1.CellChanged
If (C1FlexGrid1(e.Row, e.Col) IsNot Nothing) Then
Console.WriteLine(e.Row.ToString() + " " + e.Col.ToString + " " + C1FlexGrid1(e.Row, e.Col).ToString)
End If
End Sub
Private Shared Function GetTable() As DataTable
Dim table As DataTable = New DataTable
table.Columns.Add("Item", GetType(System.String))
table.Rows.Add("AA")
table.Rows.Add("BB")
table.Rows.Add("CC")
Return table
End Function
End Class
◎サンプルコード(C#)
using C1.Win.C1Input;
using C1.Win.C1FlexGrid;
namespace prj_C1FlexGrid
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
// 1列目:組み込みコンボ(非連結コンボ)
c1FlexGrid1.Cols[1].ComboList = "|A|B|C";
// 2列目:カスタムコンボ(非連結コンボ)
C1ComboBox c1ComboBox1 = new C1ComboBox();
c1ComboBox1.Items.Add("A");
c1ComboBox1.Items.Add("B");
c1ComboBox1.Items.Add("C");
c1FlexGrid1.Cols[2].Editor = c1ComboBox1;
DataTable dt = new DataTable();
dt = GetTable();
// 3列目:組み込みコンボ(連結コンボ)
c1FlexGrid1.Cols[3].DataMap = new MultiColumnDictionary(dt, "Item");
// 4列目:カスタムコンボ(連結コンボ)
C1ComboBox c1ComboBox2 = new C1ComboBox();
c1ComboBox2.ItemsDataSource = dt;
c1ComboBox2.ItemsDisplayMember = "Item";
c1ComboBox2.ItemsValueMember = "Item";
c1ComboBox2.TextDetached = true;
c1FlexGrid1.Cols[4].Editor = c1ComboBox2;
c1ComboBox1.SelectedIndexChanged += c1comboBox1_SelectedIndexChanged;
c1ComboBox2.SelectedIndexChanged += c1comboBox2_SelectedIndexChanged;
}
private void c1FlexGrid1_CellChanged(object sender, C1.Win.C1FlexGrid.RowColEventArgs e)
{
if (c1FlexGrid1[e.Row, e.Col] != null)
{
Console.WriteLine(e.Row.ToString() + " " + e.Col.ToString() + " " + c1FlexGrid1[e.Row, e.Col].ToString());
}
}
private void c1comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
Console.WriteLine("c1comboBox1_1SelectedIndexChanged");
c1FlexGrid1.FinishEditing();
}
private void c1comboBox2_SelectedIndexChanged(object sender, EventArgs e)
{
Console.WriteLine("c1comboBox2_1SelectedIndexChanged");
c1FlexGrid1.FinishEditing();
}
static DataTable GetTable()
{
DataTable table = new DataTable();
table.Columns.Add("Item", typeof(string));
table.Rows.Add("AA");
table.Rows.Add("BB");
table.Rows.Add("CC");
return table;
}
}
}
using C1.Win.C1FlexGrid;
namespace prj_C1FlexGrid
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
// 1列目:組み込みコンボ(非連結コンボ)
c1FlexGrid1.Cols[1].ComboList = "|A|B|C";
// 2列目:カスタムコンボ(非連結コンボ)
C1ComboBox c1ComboBox1 = new C1ComboBox();
c1ComboBox1.Items.Add("A");
c1ComboBox1.Items.Add("B");
c1ComboBox1.Items.Add("C");
c1FlexGrid1.Cols[2].Editor = c1ComboBox1;
DataTable dt = new DataTable();
dt = GetTable();
// 3列目:組み込みコンボ(連結コンボ)
c1FlexGrid1.Cols[3].DataMap = new MultiColumnDictionary(dt, "Item");
// 4列目:カスタムコンボ(連結コンボ)
C1ComboBox c1ComboBox2 = new C1ComboBox();
c1ComboBox2.ItemsDataSource = dt;
c1ComboBox2.ItemsDisplayMember = "Item";
c1ComboBox2.ItemsValueMember = "Item";
c1ComboBox2.TextDetached = true;
c1FlexGrid1.Cols[4].Editor = c1ComboBox2;
c1ComboBox1.SelectedIndexChanged += c1comboBox1_SelectedIndexChanged;
c1ComboBox2.SelectedIndexChanged += c1comboBox2_SelectedIndexChanged;
}
private void c1FlexGrid1_CellChanged(object sender, C1.Win.C1FlexGrid.RowColEventArgs e)
{
if (c1FlexGrid1[e.Row, e.Col] != null)
{
Console.WriteLine(e.Row.ToString() + " " + e.Col.ToString() + " " + c1FlexGrid1[e.Row, e.Col].ToString());
}
}
private void c1comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
Console.WriteLine("c1comboBox1_1SelectedIndexChanged");
c1FlexGrid1.FinishEditing();
}
private void c1comboBox2_SelectedIndexChanged(object sender, EventArgs e)
{
Console.WriteLine("c1comboBox2_1SelectedIndexChanged");
c1FlexGrid1.FinishEditing();
}
static DataTable GetTable()
{
DataTable table = new DataTable();
table.Columns.Add("Item", typeof(string));
table.Rows.Add("AA");
table.Rows.Add("BB");
table.Rows.Add("CC");
return table;
}
}
}
旧文書番号
82596