C# 中继器、数据表和复选框启用/禁用
我有一个asp中继器,它的数据源是一个DataTable(包含来自数据库的数据)。 在第一次加载页面时,从db填充DataTable,然后将其数据绑定到中继器。 然后,我将DataTable放入ViewState,在回发时,我使用ViewState中的DataTable,然后它允许我仅在用户完成所有操作后将数据注入数据库 某些行可以添加到中继器(通过添加到viewstate的DataTable并重新绑定) 这是中继器的代码:C# 中继器、数据表和复选框启用/禁用,c#,asp.net,checkbox,repeater,C#,Asp.net,Checkbox,Repeater,我有一个asp中继器,它的数据源是一个DataTable(包含来自数据库的数据)。 在第一次加载页面时,从db填充DataTable,然后将其数据绑定到中继器。 然后,我将DataTable放入ViewState,在回发时,我使用ViewState中的DataTable,然后它允许我仅在用户完成所有操作后将数据注入数据库 某些行可以添加到中继器(通过添加到viewstate的DataTable并重新绑定) 这是中继器的代码: <asp:UpdatePanel ID="UpdatePan
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:HiddenField ID="HdfHiddenRow" ClientIDMode="Static" runat="server" />
<asp:HiddenField ID="HdfHiddenId" ClientIDMode="Static" runat="server" />
<div style="display:none;">
<asp:Button ID="BtnHiddenButton" runat="server" Text="" OnClick="BtnHiddenButton_Click" />
</div>
<table id="TableEI" style="width: 800px; margin-left:50px;" cellpadding="0" cellspacing="0">
<asp:Repeater ID="Repeat_EffetsIndes" runat="server" OnItemDataBound="Repeat_EffetsIndes_ItemDataBound" >
<ItemTemplate>
<tr>
<td style="width: 431px;">
<asp:Label ID="LblEI" runat="server" />
</td>
<td class="auto-style1">
<asp:CheckBox ID="CheckOui" ClientIDMode="Static" runat="server" Text="Yes" onclick="CheckedLine(this)" />
</td>
<td>
<asp:CheckBox ID="CheckOui1" ClientIDMode="Static" runat="server" Enabled="false" Text="some text1" />
<br />
<asp:CheckBox ID="CheckOui2" ClientIDMode="Static" runat="server" Enabled="false" Text="some text2" />
<br />
<asp:CheckBox ID="CheckOui3" ClientIDMode="Static" runat="server" Enabled="false" Text="some text3" />
</td>
</tr>
</ItemTemplate>
</asp:Repeater>
</table>
.....
[textbox + button to add new row there]
.....
</ContentTemplate>
</asp:UpdatePanel>
问题 选中3个右复选框中的一个后,我希望直接更新ViewState数据表中的正确值(将字段“checked”从0设置为1) 问题是,我很难捕捉复选框的“CheckedChanged”,不知道为什么,而且复选框的“ID”似乎总是设置为其默认值,因此我可以通过编写“Repeater.Items[x].FindControl(“CheckOui1”)来查找它们例如,这不一定是可能的,因为我给了他们一个新的ID,多亏了这个ID,我想找到哪个复选框被选中
(为我不完美的英语写作道歉)我在您的代码中看到的唯一问题是您正在使用
GUID
设置您的复选框ID,这是错误的,因为每次您重新绑定转发器或刷新页面时,ID都会完全不同
因此,我建议您执行以下步骤:
ClientIDMode
属性。这样,HTML上的复选框ID将类似于重复\u EffectsIndes\u CheckOui\u 0
(您可以使用Firebug或浏览器的选项Inspect元素识别每个唯一ID)重复\u EffectsIndes\u CheckOui\u 0\u CheckOui1
(对于其他复选框,除了最后一个数字外,其余都是相同的),0(零)是行索引转发器.Items[x].FindControl(“”
),其中
是控件ID希望能有帮助。非常感谢你,坎迪斯,这解决了我的问题!不知道为什么我没有注意到GUID造成了大问题,比如我是盲人:p
protected void Repeat_EffetsIndes_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
DataRowView drv = e.Item.DataItem as DataRowView;
((Label)e.Item.FindControl("LblEI")).Text = drv["Suivi_EffetsIndes_Label"].ToString();
CheckBox ParentCheckBox = ((CheckBox)e.Item.FindControl("CheckOui"));
CheckBox ChildCheckBox1 = ((CheckBox)e.Item.FindControl("CheckOui1"));
CheckBox ChildCheckBox2 = ((CheckBox)e.Item.FindControl("CheckOui2"));
CheckBox ChildCheckBox3 = ((CheckBox)e.Item.FindControl("CheckOui3"));
string _IdPrefix = Guid.NewGuid().ToString().Replace("-", "");
// Affectation d'un ID unique à chaque checkbox "Oui"
ParentCheckBox.ID = _IdPrefix;
// Concaténation de l'ID de la checkbox parent (Oui) et d'un chiffre pour identifier les checkboxes.
ChildCheckBox1.ID = _IdPrefix + "1";
ChildCheckBox2.ID = _IdPrefix + "2";
ChildCheckBox3.ID = _IdPrefix + "3";
}