Gridview's eval condition is not working correctly

I have a database table with theme, fault, hour. The hourly value is stored as 1,2,3,4 and 5 in the database. I want to disable a checked checkbox, but in my result it is blocking the whole row and not a specific checkbox. Get rid of this problem. I have uploaded my sample code and database schema below

<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

I only clicked 1 checkbox, but it locks the entire column. Get rid of the problem

+3


source to share


1 answer


If I understand the question correctly, the problem is that all five checkboxes in the row are checked regardless of the hour value. This is because you are using

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

      

to set the value of the checkbox. You are converting an integer hour value to a boolean value. Convert.ToBoolean converts any non-zero integer to true, so as long as the hour is not zero, the checkbox will be checked.

Working example:

Creating an encoded data source:



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>  

      

The results show only one checkbox and this box is disabled:

Gridview result

0


source







All Articles