ASP..NET 2.0 Gridview复选框列
本文关键字:复选框 Gridview NET ASP | 更新日期: 2023-09-27 18:08:23
我有一个GridView
,它在三列中显示数据。第三列是CheckBox
。我有两件事需要完成
-
CheckBox
将根据列值(1,0) 检查 - 如果选中,剩下的两列应该显示
####
,但是这两列的数据应该保留在数据库中。
如何做到这一点?
我可以在RowDataBound
事件上找到CheckBox
并检查值,并使CheckBox
检查和不检查吗?把其他列改成####
怎么样?
string str = ((System.Data.DataRowView)(e.Row.DataItem)).Row.ItemArray[2].ToString();
这有助于设置复选框是否被选中。
如果checked为true,则尝试执行以下操作。
((System.Data.DataRowView)(e.Row.DataItem)).Row.ItemArray[0] = "#####";
((System.Data.DataRowView)(e.Row.DataItem)).Row.ItemArray[1] = "#####";
((System.Data.DataRowView)(e.Row.DataItem)).Row.AcceptChanges();
显示gridview复选框为选中状态,但列值未更改为"####"
标题>您可以将您的项目列转换为TemplateColumns
并执行以下操作,这将使您的代码本地化到控制级别,您不必担心所有的搜索。我宁愿永远不要使用内置的列类型,因为未来的增强通常需要将列更改为TemplateColumns
。它也给了你很大的使用灵活性。
下面是一个例子:
<asp:GridView ID="grdYourGrid" runat="server" AutoGenerateColumns="False">
<Columns>
<asp:TemplateField HeaderText="YourField1">
<ItemTemplate>
<asp:Literal runat="server" ID="ltYourField1"
OnDataBinding="ltYourField1_DataBinding" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="YourField2">
<ItemTemplate>
<asp:Literal runat="server" ID="ltYourField2"
OnDataBinding="ltYourField2_DataBinding" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="YourCheckBoxField">
<ItemTemplate>
<asp:CheckBox runat="server" ID="chkYourCheckBoxField"
OnDataBinding="chkYourCheckBoxField_DataBinding" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
然后在你的代码后面实现每个控件的OnDataBinding
:
protected void ltYourField1_DataBinding(object sender, System.EventArgs e)
{
Literal lt = (Literal)(sender);
lt.Text = (bool)(Eval("YourCheckBoxField")) ?
"##########" : Eval("YourField1");
}
protected void ltYourField2_DataBinding(object sender, System.EventArgs e)
{
Literal lt = (Literal)(sender);
lt.Text = (bool)(Eval("YourCheckBoxField")) ?
"##########" : Eval("YourField2");
}
protected void chkYourCheckBoxField_DataBinding(object sender, System.EventArgs e)
{
CheckBox chk = (CheckBox)(sender);
chk.Checked = (bool)(Eval("YourCheckBoxField"));
}
这样做的好处是你可以很容易地替换代码,因为它是完全隔离的,不需要"搜索"预期的控件。我很少使用RowDataBound
事件,因为它使您必须编写特定的代码来查找控件,并且对我来说将代码本地化到控件更有意义。如果有人改变了一些东西,他们知道这只会影响到一个控件,而不是一行上的所有东西,可能会产生副作用。您也可以使用<%#
方法并在标记中正确地执行Eval
s,但我个人更喜欢在aspx标记中根本没有任何代码。