2013-10-28 2 views
1

У меня есть GridView заселена флажок, используя код нижеGridView CheckBox Disable

Источник данных Результат:

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. Теперь мне нужно сделать, если столбец null, флажок должен быть отключен/readonly

+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

OK ILL TRY THIS – 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 означает, ваше имя столбца.

С уважением Amit Виас

+0

да 101 это имя моей колонки .. Это говорит слишком много символов в строковом литерале .. тогда я попытался удалить кавычки, все еще ошибку – zxc

1

Другим вариантом заключается в использовании GridView «s RowDataBound события, которое стреляет для каждого ряда, связанного с видом сетки, как это:

Markup:

<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 дает преимущество использования Intellisense Visual Studio и, как правило, проблем с поиском в качестве ошибок синтаксиса во время компиляции, тогда как embedded code blocks приводит к проблемам с ловушкой в ​​качестве ошибок во время выполнения.

+0

ok tnx, но можете ли вы объяснить, что такое «разница» – zxc

+0

@zxc - разница в том, что вы используете компилятор как инструмент по сравнению с написанием текста, который оценивается как код в разметке. Основным преимуществом этого является то, что его легче отлаживать, так как вы можете поставить точки останова на свой код и пройти через код в в то время как вы не можете пройти через логику во встроенных блоках кода. Если бы я шел, чтобы поддерживать ваш код, я бы предпочел увидеть код, где я могу использовать возможности Visual Studio (компилятор и отладчик), вместо того, чтобы пытаться выяснить встроенные блоки кода. Только мои два цента. :-) –