1

我有一个使用下面的代码由复选框填充的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,则它适用于复选框。现在我需要做的是,如果该列为空,则该复选框应该被禁用/只读

4

3 回答 3

2

它应该是这样的:

 <asp:CheckBox runat="server" id="CheckBox1" Checked='<%# Eval("101").ToString()=="1" ? true : false %>' Enabled='<%#(String.IsNullOrEmpty(Eval("101").ToString()) ? false: true) %>'/>

它对我有用。

于 2013-10-28T03:34:22.363 回答
1

另一种选择是使用GridView'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;
                }
            }
        }
    }
}

注意:使用RowDataBound事件提供了利用 Visual Studio 的 Intellisense 的优势,并且通常将问题捕获为编译时语法错误,而embedded code blocks导致将问题捕获为运行时错误。

于 2013-10-28T03:50:11.713 回答
0

尝试这个

<asp:CheckBox runat="server" id="cb101" Checked='<%# Convert.ToString(Eval("101")) == string.Empty ? 'True' : 'False' %>' Enabled='<%# Eval("101")==null ? 'false': 'true' %>' />

这里 101 表示您的列名。

问候阿米特维亚斯

于 2013-10-28T03:36:27.187 回答