c#之如何保存动态复选框更改

不点 阅读:22 2024-10-01 17:34:08 评论:0

我有几个动态创建的复选框,并且会显示现有的选择,但是当用户进行更改时,我想将它们存储回去。这是动态生成和选择的代码

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


标签:C#
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号