我有主题,故障,小时的数据库表。在小时值am存储像数据库中的1,2,3,4和5.我想禁用已经单击的复选框,但在我的结果中它是阻止整行而不是特定的复选框。帮助我解决这些问题。我已经上传了我的示例代码和数据库架构
<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();
}
我只点击了1个复选框值,但它阻止了整个列。帮我解决问题
答案 0 :(得分: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>
结果显示只选中了一个框,并且该框已禁用: