如何向数据表中添加复选框控件?

20

如何在DataTable中添加一个复选框,并将其绑定到DataGrid?

DataTable ColumnList = new DataTable();
ColumnList.Columns.Add("Column Fields");

int j = 1, i = 0;
CheckBox colCheckbox = new CheckBox();
foreach (Columns col in ColumnNames)
{
    colCheckbox.Name = col.ColumnName;       
    ColumnList.Rows.Add(colCheckbox); // This is getting displayed as System.Windows.Forms.CheckBox,CheckState=0
}

请帮忙。


这是WinForms吗?WPF?还是ASP.NET? - Edwin de Koning
你目前有什么进展? - Abe Miessler
你混淆了可视化控件和数据源:你不能将复选框添加到DataTable中,因为复选框是一个可视化控件,而DataTable只是数据。但是,你可以将复选框列添加到DataGridView中(它是一个可视化控件,可以绑定到DataTable)。 - stakx - no longer contributing
2个回答

49
你需要在 DataTable 中创建一个布尔类型的字段(列)。当你将 DataTable 绑定到 DataGridView 时,将会为该布尔类型的字段创建一个复选框列。 示例代码:
var dt = new DataTable();
dt.Columns.Add(new DataColumn("Selected", typeof(bool))); //this will show checkboxes
dt.Columns.Add(new DataColumn("Text", typeof(string)));   //this will show text

var dgv = new DataGridView();
dgv.DataSource = dt;

这会将 dt DataTable 绑定到 dgv DataGridView。DataGridView 会自动为第一个数据列(Selected)显示一个DataGridViewCheckBoxColumn,并为第二个数据列(Text)显示一个DataGridViewTextBoxColumn


1
我想在你的回答中补充一点,自动生成的可视化列是DataGridViewCheckBoxColumn,如果OP想要手动添加它。 - stakx - no longer contributing
当使用 DataGridViewCheckBoxColumn 时,是否可能在一列中显示复选框和文本?我该如何绑定两者? - NewBie
1
你不能在DataGridViewCheckBoxColumn列中添加文本。文本将显示在另一列中。查看我的修订说明如何实现此功能。 - Alex Essilfie
Dim colItem3 As New DataColumn("columnName", Type.GetType("System.Boolean")) Dim colItem4 As New DataColumn("columnName2", Type.GetType("System.String")) 也可以运行。 - Sophie
Dim colItem3 As New DataColumn("columnName", Type.GetType("System.Boolean")) Dim colItem4 As New DataColumn("columnName2", Type.GetType("System.String")) 也可以运行。 - undefined

-1

你必须指定列的类型。

ColumnList.Columns.Add("Column Fields", gettype(CheckBox)); 

但是为什么你想要向 DataTable 中添加一个控件呢?为什么不只添加一个字符串或者整数呢?


但是这并没有在数据网格中显示任何复选框。我需要将复选框绑定到带有一些文本绑定的网格。 - NewBie
您需要将DataGridCheckBoxColumn添加到Datagrid中,并将该列绑定到DataTable中的字段。无需向DataTable中添加复选框。 - Rhapsody

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接