2015-07-20 2 views
3

У меня есть таблица базы данных с темой, неисправность, час. В часовом значении хранятся как 1,2,3,4 и 5 в базе данных. Я хочу отключить уже нажатую проверку коробка, но в моем результате он блокирует всю строку не конкретный чек box.help меня из этих problem.I загрузили мой пример код и схему базы данных нижеСостояние Gridview eval не работает должным образом

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" OnRowDataBound="GridView1_RowDataBound"> 
     <Columns> 
      <asp:BoundField DataField="datee" HeaderText="Day/Hour" SortExpression="datee" /> 
      <asp:TemplateField HeaderText="Hour1"> 
       <EditItemTemplate> 
        <asp:CheckBox ID="chkColumn1" runat="server" /> 
       </EditItemTemplate> 
       <ItemTemplate> 
        <asp:CheckBox ID="chkHour1" runat="server" Checked='<%# Convert.ToBoolean((int)Eval("hour"))%>' Enabled='<%# Convert.ToBoolean((int)Eval("hour")!=1) %>' OnCheckedChanged="chkHour1_CheckedChanged"/> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField HeaderText="Hour2"> 
       <EditItemTemplate> 
        <asp:CheckBox ID="ChkColumn2" runat="server"/> 
       </EditItemTemplate> 
       <ItemTemplate> 
        <asp:CheckBox ID="chkHour2" runat="server" Checked='<%#Convert.ToBoolean((int)Eval("hour"))%>' Enabled='<%# Convert.ToBoolean((int)Eval("hour")!=2) %>' OnCheckedChanged="chkHour2_CheckedChanged"/> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField HeaderText="Hour3"> 
       <EditItemTemplate> 
        <asp:CheckBox ID="chkColumn3" runat="server"/> 
       </EditItemTemplate> 
       <ItemTemplate> 
        <asp:CheckBox ID="chkHour3" runat="server" Checked='<%#Convert.ToBoolean((int)Eval("hour"))%>' Enabled='<%# Convert.ToBoolean((int)Eval("hour")!=3) %>' OnCheckedChanged="chkHour3_CheckedChanged"/> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField HeaderText="Hour4"> 
       <EditItemTemplate> 
        <asp:CheckBox ID="chkColumn4" runat="server"/> 
       </EditItemTemplate> 
       <ItemTemplate> 
        <asp:CheckBox ID="chkHour4" runat="server" Checked='<%#Convert.ToBoolean((int)Eval("hour"))%>' Enabled='<%# Convert.ToBoolean((int)Eval("hour")!=4) %>' OnCheckedChanged="chkHour4_CheckedChanged"/> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField HeaderText="Hour5"> 
       <EditItemTemplate> 
        <asp:CheckBox ID="chkColumn5" runat="server"/> 
       </EditItemTemplate> 
       <ItemTemplate> 
        <asp:CheckBox ID="chkHour5" runat="server" Checked='<%#Convert.ToBoolean((int)Eval("hour"))%>' Enabled='<%# Convert.ToBoolean((int)Eval("hour")!=5) %>' OnCheckedChanged="chkHour5_CheckedChanged"/> 
       </ItemTemplate> 
      </asp:TemplateField> 
     </Columns> 
    </asp:GridView> 





using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString)) 
      { 
       con.Open(); 
       SqlDataAdapter cmd = new SqlDataAdapter("select DISTINCT datee,hour from tblfac order by datee", con); 
       DataTable dt = new DataTable("dt"); 
       cmd.Fill(dt); 
       GridView1.DataSource = dt; 
       GridView1.DataBind(); 
      } 

enter image description here

Я щелкнул только 1 флажок, но он блокирует весь столбец. Избавьтесь от проблемы

+0

Почему вы используете одну и ту же переменную 'hour' для всех 5 флажков? У вас нет разных переменных? Можете ли вы показать нам свой вывод SQL? – shanish

+0

Это таблица времени, поэтому я хочу использовать только час –

+0

Вам нужно настроить его на событие RowDataBound, чтобы отключить отмеченный флажок. – Chris

ответ

0

Если я правильно понимаю вопрос, проблема в том, что все пять флажков в строке проверяются независимо от того, что такое значение часа. Это связано с тем, что вы используете

Checked='<%#Convert.ToBoolean((int)Eval("hour"))%>' 

, чтобы установить значение флажка. Вы конвертируете целочисленное значение часа в логическое значение. Convert.ToBoolean преобразует любое ненулевое целое число в значение true, так что, пока час не равен нулю, флажок будет установлен.

Рабочий пример:

Создание источника данных в коде-за:

DataTable dt = new DataTable("dt"); 
dt.Columns.Add("datee", typeof(string)); 
dt.Columns.Add("hour", typeof(int)); 

dt.Rows.Add("06-Jul-15 12:00:00 AM",1); 
dt.Rows.Add("07-Jul-15 12:00:00 AM",2); 
dt.Rows.Add("08-Jul-15 12:00:00 AM",3); 
dt.Rows.Add("09-Jul-15 12:00:00 AM",4); 
dt.Rows.Add("10-Jul-15 12:00:00 AM",5); 

GridView1.DataSource = dt; 
GridView1.DataBind(); 

Gridview:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false"> 
    <Columns> 
     <asp:BoundField DataField="datee" HeaderText="Day/Hour" SortExpression="datee" /> 
     <asp:TemplateField HeaderText="Hour1"> 
      <ItemTemplate> 
       <asp:CheckBox ID="chkHour1" runat="server" Checked='<%# Convert.ToBoolean((int)Eval("hour")==1)%>' Enabled='<%# Convert.ToBoolean((int)Eval("hour")!=1) %>' /> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Hour2"> 
      <ItemTemplate> 
       <asp:CheckBox ID="chkHour2" runat="server" Checked='<%#Convert.ToBoolean((int)Eval("hour")==2)%>' Enabled='<%# Convert.ToBoolean((int)Eval("hour")!=2) %>' /> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Hour3"> 
      <ItemTemplate> 
       <asp:CheckBox ID="chkHour3" runat="server" Checked='<%#Convert.ToBoolean((int)Eval("hour")==3)%>' Enabled='<%# Convert.ToBoolean((int)Eval("hour")!=3) %>' /> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Hour4"> 
      <ItemTemplate> 
       <asp:CheckBox ID="chkHour4" runat="server" Checked='<%#Convert.ToBoolean((int)Eval("hour")==4)%>' Enabled='<%# Convert.ToBoolean((int)Eval("hour")!=4) %>' /> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Hour5"> 
      <ItemTemplate> 
       <asp:CheckBox ID="chkHour5" runat="server" Checked='<%#Convert.ToBoolean((int)Eval("hour")==5)%>' Enabled='<%# Convert.ToBoolean((int)Eval("hour")!=5) %>' /> 
      </ItemTemplate> 
     </asp:TemplateField> 
    </Columns> 
</asp:GridView> 

Результаты, показывающие только один флажок установлен, и что коробка отключена:

Resulting Gridview

Смежные вопросы