作成日: 2024/01/31 最終更新日: 2024/01/31
文書種別
使用方法
詳細
FlexGridのValidateEditイベントを用いて、3値のチェックボックスで、オン/オフ/不確定の3つの状態を繰り返し切り替えることができます。

以下に、True/False/DBNull.Valueの値を持つデータテーブルにグリッドをバインドしてチェックボックスを表示し、そのクリックによって、チェックの状態を切り替えるサンプルを紹介します。
◎サンプルコード(VB)
以下に、True/False/DBNull.Valueの値を持つデータテーブルにグリッドをバインドしてチェックボックスを表示し、そのクリックによって、チェックの状態を切り替えるサンプルを紹介します。
◎サンプルコード(VB)
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim dt As New DataTable()
dt.Columns.Add("Bool", GetType(Boolean))
dt.Columns("Bool").AllowDBNull = True
Dim i As Integer
For i = 0 To 9
dt.Rows.Add(New Object() {True})
dt.Rows.Add(New Object() {False})
dt.Rows.Add(New Object() {DBNull.Value})
Next i
C1FlexGrid1.AutoResize = False
C1FlexGrid1.DataSource = dt
End Sub
Private Sub C1FlexGrid1_ValidateEdit(sender As Object, e As C1.Win.C1FlexGrid.ValidateEditEventArgs) Handles C1FlexGrid1.ValidateEdit
If C1FlexGrid1.Cols(e.Col).DataType Is GetType(Boolean) Then
e.Cancel = True
If C1FlexGrid1(e.Row, e.Col).Equals(False) Then
C1FlexGrid1(e.Row, e.Col) = True
Else
If C1FlexGrid1(e.Row, e.Col).Equals(True) Then
C1FlexGrid1(e.Row, e.Col) = DBNull.Value
Else
If C1FlexGrid1(e.Row, e.Col).Equals(DBNull.Value) Then
C1FlexGrid1(e.Row, e.Col) = False
End If
End If
End If
End If
Dim chkState As String = C1FlexGrid1(e.Row, e.Col).ToString()
If chkState = Nothing Then chkState = "DBNull.Value"
System.Diagnostics.Debug.WriteLine("Check状態:" + chkState)
End Sub
End Class
◎サンプルコード(C#)
namespace prj_C1FlexGrid
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
var dt = new DataTable();
dt.Columns.Add("Bool", typeof(bool));
dt.Columns["Bool"].AllowDBNull = true;
int i;
for (i = 0; i <= 9; i++)
{
dt.Rows.Add(new object[] { true });
dt.Rows.Add(new object[] { false });
dt.Rows.Add(new object[] { DBNull.Value });
}
c1FlexGrid1.AutoResize = false;
c1FlexGrid1.DataSource = dt;
}
private void c1FlexGrid1_ValidateEdit(object sender, C1.Win.C1FlexGrid.ValidateEditEventArgs e)
{
if (object.ReferenceEquals(c1FlexGrid1.Cols[e.Col].DataType, typeof(bool)))
{
e.Cancel = true;
if (c1FlexGrid1[e.Row, e.Col].Equals(false))
{
c1FlexGrid1[e.Row, e.Col] = true;
}
else if (c1FlexGrid1[e.Row, e.Col].Equals(true))
{
c1FlexGrid1[e.Row, e.Col] = DBNull.Value;
}
else if (c1FlexGrid1[e.Row, e.Col].Equals(DBNull.Value))
{
c1FlexGrid1[e.Row, e.Col] = false;
}
}
string chkState = c1FlexGrid1[e.Row, e.Col].ToString();
if (string.IsNullOrEmpty(chkState))
chkState = "DBNull.Value";
System.Diagnostics.Debug.WriteLine("Check状態:" + chkState);
}
}
}