2013-10-28 58 views
1

我有使用以下GridView的复选框来禁用

数据源的结果的代码由复选框填充一个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 

enter image description here 它被适当地用于复选框工作,如果如果该列是0和1 现在我需要做的是,如果列为空复选框应该禁用/只读

+0

Ypu可以把这个条件在Itemdatabound ... –

+0

@Rony你可以请给我一个这样的例子 – zxc

+0

你知道如何从Repeater获取复选框的值吗? –

回答

2

它应该是这样的:

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

而且它为我工作。

+0

确定ILL尝试这 – zxc

+0

它仍然是这样的:( – zxc

+0

我编辑了我的答案 – afzalulh

0

试试这个

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

这101意味着你的列名。

问候 阿米特Vyas的

+0

是的101是我的专栏名称..它说字符串字符太多字符..然后我试图删除引号仍然是一个错误 – zxc

1

另一种选择是使用GridViewRowDataBound事件,它触发为绑定到网格视图中的每一行,例如:

标记:

<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的智能感知,一般捕的问题编译时语法错误的优势,而embedded code blocks结果在醒目的问题运行时错误。

+0

确定tnx,但你可以请解释什么是“差异” – zxc

+0

@zxc - 区别在于,你使用编译器作为工具与写作文本是评价时的标记代码,这样做的主要优点是,它更容易调试,你可以把断点在你的代码和步骤通过代码代码隐藏而不能在嵌入代码块通过逻辑步骤。如果我沿着来维护你的代码,我宁愿看到代码隐藏在那里我可以利用Visual Studio中(编译器和调试器)的能力,而不是试图找出嵌入的代码块。只是我的两分钱。 :-) –