我使用下面的代码填充了复选框的gridview
数据来源结果:
Branch,101,102,103,104,105,106,107,108,109,110
00001,null,null,null,null,null,null,null,null,null,null
00016,1,1,1,1,1,0,0,0,0,0
00244,1,1,1,1,1,1,1,1,1,1
<asp:TemplateField HeaderText="101">
<ItemTemplate>
<asp:CheckBox runat="server" id="cb101" Checked='<%# Eval("101").ToString().Equals("1") %>' />
</ItemTemplate>
</asp:TemplateField>... and so on
如果列为0和1,则它适用于复选框。 现在我需要做的是,如果列为null,则应禁用/ readonly
复选框答案 0 :(得分:2)
它应该是这样的:
<asp:CheckBox runat="server" id="CheckBox1" Checked='<%# Eval("101").ToString()=="1" ? true : false %>' Enabled='<%#(String.IsNullOrEmpty(Eval("101").ToString()) ? false: true) %>'/>
它对我有用。
答案 1 :(得分:1)
另一种选择是使用GridView
的{{1}}事件,该事件会触发绑定到网格视图的每一行,如下所示:
标记:
RowDataBound
代码隐藏:
<asp:GridView runat="server" id="GridView1" OnRowDataBound="GridView1_RowDataBound" />
注意:使用protected void GridView1_RowDataBound(Object sender, GridViewRowEventArgs e)
{
// Only work with data rows, ignore header and footer rows
if(e.Row.RowType == DataControlRowType.DataRow)
{
if(DataBinder.Eval(e.Row.DataItem, "Difference") == null)
{
CheckBox the101Checkbox = e.Row.FindControl("cb101") as CheckBox;
// Verify the check box was found before we try to use it
if(the101Checkbox != null)
{
the101Checkbox.Enabled = false;
}
}
else
{
if(DataBinder.Eval(e.Row.DataItem, "Difference") == "1")
{
CheckBox the101Checkbox = e.Row.FindControl("cb101") as CheckBox;
// Verify the check box was found before we try to use it
if(the101Checkbox != null)
{
the101Checkbox.Checked = true;
}
}
}
}
}
事件提供了利用Visual Studio的Intellisense并通常将问题作为编译时语法错误捕获的优势,而RowDataBound
会导致捕获问题作为运行时错误。
答案 2 :(得分:0)
试试这个
<asp:CheckBox runat="server" id="cb101" Checked='<%# Convert.ToString(Eval("101")) == string.Empty ? 'True' : 'False' %>' Enabled='<%# Eval("101")==null ? 'false': 'true' %>' />
这里101表示您的列名。
此致 Amit Vyas