动态地将checkboxlist添加到占位符中,并获取复选框列表的选中值

时间:2009-11-02 11:44:18

标签: asp.net c#-4.0

我正在创建一个管理页面,其中将动态创建checkboxlist(来自DB的用户列表)并检索其已检查的用户值。

有不同类型的用户,因此可以分组进行区分。

现在首先定义一个面板,动态创建复选框列表并放置在面板内,然后将面板放在占位符内。

我在这里做的是将复选框列表放在面板中,然后放置占位符内的面板。因此,不会检索Checkboxlist的值,因为它没有得到复选框列表,并且它不会循环通过Checkboxlist。

我所做的是。

    private void AddControl(string pUserGrp, int pUserGrp_Id, int pName)
    {           
        CheckBoxList chkList = new CheckBoxList();
        CheckBox chk = new CheckBox();
        User us = new User();
        us.OrderBy = "Order By User_Name";
        us.WhereClause = "Where UserRole_Id = " + pUserGrp_Id ;
        chkList.ID = "ChkUser" + pName ;
        chkList.AutoPostBack = true;
        chkList.Attributes.Add("onClick", "getVal(ChkUser" + pName + ");");
        chkList.RepeatColumns = 6;
        chkList.DataSource = us.GetUserDS();
        chkList.DataTextField = "User_Name";
        chkList.DataValueField = "User_Id";                        
        chkList.DataBind();
        chkList.Attributes.Add("onClick", "getVal(this);");

        Panel pUser = new Panel();

        if (pUserGrp != "")   
        {
            pUser.GroupingText = pUserGrp ;
            chk.Text = pUserGrp;            
        }
        else 
        {
            pUser.GroupingText = "Non Assigned Group";
            chk.Text = "Non Assigned group";
        }
        pUser.Controls.Add(chk);
        pUser.Controls.Add(chkList);
        Place.Controls.Add(pUser);                          
   }

    private void setChecked(int pPageGroupId)
    {
        ArrayList arr = new ArrayList();
        PageMaster obj = new PageMaster();
        obj.WhereClause = " Where PageGroup_Id = " + pPageGroupId;
        arr = obj.GetPageGroupUserRights(null);

        CheckBoxList chkList = (CheckBoxList)Place.FindControl("ChkUser");

        if (chkList != null)
        {
            for (int i = 0; i < chkList.Items.Count; i++)
            {
                if (arr.Count > 0)
                {
                    int ii = 0;
                    while (ii < arr.Count)
                    {
                        PageMaster oCand = (PageMaster)arr[ii];

                        if (oCand.User_Name == chkList.Items[i].Text)
                        {
                            if (!chkList.Items[i].Selected)
                            {
                                chkList.Items[i].Selected = true;
                            }
                        }
                        ii++;
                        oCand = null;                            
                    }
                }
            }
        }
    }

    public string GetListCheckBoxText()
    {
        StringBuilder sbtext = new StringBuilder();            
        foreach (Control c in Place.Controls)
        {             
            if (c.GetType().Name == "CheckBoxList")
            {
                CheckBoxList cbx1 = (CheckBoxList)c;

                foreach (ListItem li in cbx1.Items)
                {
                    if (li.Selected == true)
                    {
                        sbtext.Append(",");
                        sbtext.Append(li.Value);
                    }
                    else
                    {
                        sbtext.Append(li.Value);
                    }
                }
            }
        }
        return sbtext.ToString();        }

它没有通过setChecked()中的Checkboxlist控件,也没有遍历GetListCheckBoxTest()。

任何人都可以帮助我。

此致

1 个答案:

答案 0 :(得分:0)

问题是您试图在不设置setChecked属性的情况下找到控件(在Name中)。你正在使用这个:

CheckBoxList chkList = (CheckBoxList)Place.FindControl("ChkUser");

AddControl中的这个位置是什么?

chkList.Name = "ChkUser";

而在GetListCheckBoxText而不是......

if (c.GetType().Name == "CheckBoxList")

...使用此:

if (c.GetType()== typeof(CheckBoxList))