我需要使用DataTable对象填充DataGrid作为DataSource。它很完美,我可以做到这一点但是,我坚持每行中的CheckBox要求。我知道DataGridView提供DataGridViewCheckBoxColumn但是,我希望DataGrid也一样。
我得到了一个解决方案,就像这样 -
DataTable dt = new DataTable("Books");
DataColumn dc1 = new DataColumn("Name", typeof(System.String));
DataColumn dc2 = new DataColumn("ISBN", typeof(System.String));
DataColumn dc3 = new DataColumn("Price", typeof(System.Int32));
DataColumn dc4 = new DataColumn("Author", typeof(System.String));
DataColumn dcSelectToDelete = new DataColumn("Select");
dcSelectToDelete.DataType = System.Type.GetType("System.Boolean");
dcSelectToDelete.DefaultValue = false;
dt.Columns.Add(dc1);
dt.Columns.Add(dc2);
dt.Columns.Add(dc3);
dt.Columns.Add(dc4);
dt.Columns.Add(dcSelectToDelete);
drd.DataSource = dt;
但我不确定这段代码的正确性。如果它有效,我也不知道,如何处理checkBox事件的Checked事件。
请为DataGrid建议正确的解决方案(Not DataGridView)。
如果我按某些列表填写数据表。如何在每列中动态添加CheckBox?
答案 0 :(得分:0)
你是否有理由使用DataGrid
代替GridView
,这肯定更好,更有能力控制?
无论如何,要在DataGrid中显示Check Box,您需要使用TemplateColumn。如果您正在使用自动生成列,则需要在关闭时切换,而是手动指定所有列。例如,
<asp:DataGrid id="MyDataGrid" runat="server" AutoGenerateColumns="false" ... >
<Columns>
<asp:BoundColumn HeaderText="Name" DataField="Name"/>
<asp:BoundColumn HeaderText="ISBN" DataField="ISBN"/>
...
<asp:TemplateColumn>
<ItemTemplate>
<asp:CheckBox ID="SelectRow" runat="server"
Checked='<%# DataBinder.Eval(Container.DataItem, "Select") %>' />
</ItemTemplate>
</Columns>
</asp:DataGrid>
数据表代码将与您发布的相同 - 复选框的checked属性根据select列中的值设置。
答案 1 :(得分:0)
如何使用DataGridTemplateColumn(如在WPF DataGrid中)并在其中放置一个带Checked和UnChecked事件的复选框或任何事件,然后在后面的代码中处理此事件。 例如在WPF中添加DataGrid.Columns
<DataGridTemplateColumn >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox x:Name="chkSelect" Checked="chkSelect_Checked" Unchecked="chkSelect_Unchecked" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
此外,您尚未将技术指定为WPF,ASP或其他。