Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 中继器、数据表和复选框启用/禁用_C#_Asp.net_Checkbox_Repeater - Fatal编程技术网

C# 中继器、数据表和复选框启用/禁用

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中继器,它的数据源是一个DataTable(包含来自数据库的数据)。 在第一次加载页面时,从db填充DataTable,然后将其数据绑定到中继器。 然后,我将DataTable放入ViewState,在回发时,我使用ViewState中的DataTable,然后它允许我仅在用户完成所有操作后将数据注入数据库

某些行可以添加到中继器(通过添加到viewstate的DataTable并重新绑定)

这是中继器的代码:

  <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)

  • 在Javascript上,验证选中了哪个复选框,获取ID并启用其他3个复选框(我想与您已经做的相同)。其他3个复选框的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";
      }