如何保存动态复选框更改

本文关键字:动态 复选框 保存 何保存 | 更新日期: 2023-09-27 18:09:59

我有几个动态创建的复选框,现有的选择将被显示,但是当用户进行更改时,我想将它们存储回来。下面是动态生成和选择

的代码
private void Role(string role)
{
   SystemUserDal dal = new SystemUserDal();
   var userId = Guid.Parse(Request.QueryString["ID"].ToString());
   var roles = dal.GetRolesList(userId);
   foreach (KeyValuePair<Guid, string> r in roles)
   {
       CheckBox chk = new CheckBox();
       chk.ID = r.Value;
       chk.Text = r.Value;
       if (role.Contains(r.Value))
       {
          chk.Checked = true;
       } 
       rolepanel.Controls.Add(chk);
   }
}

我正在尝试下面的

private void GetCheckBoxes()
{
    foreach (Control ctrl in rolepanel.Controls)
    {
        CheckBox c = ctrl as CheckBox;
        string id = c.ID;
        string role = c.Text;
    }
}

当我步进代码时,它以3的计数命中foreach循环,但CTL为空。有线索吗?

如何保存动态复选框更改

您可能会得到错误,因为rolepanel.FiondControl("chk")返回null,因为它没有找到ID="chk"的控件。方法FindControl接受一个字符串—您正在查找的控件的ID。您添加的复选框没有ID="chk",它们都有您代码中的ID=r.value。我建议为id提出一些模式,您可以稍后使用这些模式来查找复选框。

如果你的rolepanel只包含你动态添加的复选框,你可以使用rolepanel.Controls来获得所有的复选框。

不要忘记将控件强制转换为CheckBox

所以你的GetCheckBoxes()可以看起来像:

private void GetCheckBoxes()
{
    foreach (Control ctrl in rolepanel.Controls)
    {
        if (ctrl is CheckBox)
        {
            CheckBox c = ctrl as CheckBox;
            string cText = c.Text;
            // do what you need to do with cText, or checkbox c
        }
    }
}

如果强制转换它还会出错吗?

private void GetCheckBoxes()
{
    CheckBox chk = (CheckBox)rolepanel.FindControl("chk");
    if(chk!= null)
}

您应该将控件强制转换为CheckBox:

private void GetCheckBoxes()
{
    CheckBox chk = (CheckBox)rolepanel.FindControl("chk");
    if(chk!= null)
    ....
}

另一个解决方案是为CheckBox.CheckedChanged创建公共处理程序。然后,所有的动态CheckBoxes CheckedChanged事件都将绑定到该处理程序。

public void Checkbox_CheckedChanged(object sender, EventArgs e)
{
    CheckBox checkBox = sender is CheckBox;
    if(checkbox!=null)
    {
         //do your saving things.
    }
}

尝试使用CheckBoxList,然后执行如下操作

        for (int i = 0; i < chkList.Items.Count; i++)
        {
            if (chkList.Items[i].Selected)
            {
                // Store Item
            }
        }