如何以编程方式添加复选框

时间:2013-12-17 08:46:13

标签: c# asp.net checkbox

我正在开发一个应用程序,我需要添加过滤器。 因为过滤选项不是预定义的,所以我会以编程方式添加复选框,这取决于表中的值,我将复选框添加为fallow

public void addCusineCheckbox()
{
            DataTable CusineList = Sql.ExecuteSelectCommand("select prod_group_id,Prod_group_name from Master_Prod_Groups");
            for (int i = 0; i < CusineList.Rows.Count; i++)
            {
                CheckBox chkCusine = new CheckBox();
                chkCusine.ID = "chk" + CusineList.Rows[i]["Prod_group_name"].ToString();
                chkCusine.Text = CusineList.Rows[i]["Prod_group_name"].ToString();
                divCusineFilter.Controls.Add(chkCusine);
            }
}

帮助用户选择所需的字段(还有更多其他选项可供选择),然后点击“应用过滤器”,尝试访问添加的复选框为“休闲”

public string getCusineFilterString()
{

            string CusineID =null;
            DataTable CusineList = Sql.ExecuteSelectCommand("select prod_group_id,Prod_group_name from Master_Prod_Groups");
            for (int i = 0; i < CusineList.Rows.Count; i++)
            {
                CheckBox chk = (CheckBox)Page.FindControl("chk" + CusineList.Rows[i]["Prod_group_name"]);
                if (chk.Checked == true)
                {
                    if (i == 0)
                    {
                        CusineID = CusineList.Rows[i]["prod_group_id"].ToString();
                    }
                    else
                    {
                        CusineID = CusineID + "," + CusineList.Rows[i]["prod_group_id"].ToString();
                    }
                }
            }
            return CusineID;
}

但它给出了未将对象设置为实例的错误。

我不知道如何访问该复选框。

3 个答案:

答案 0 :(得分:3)

有一些限制:

  • 您无法访问ASP.net之前或之前未添加的任何控件。因此,您可以在Page OnInit上添加控件,然后就可以访问它了。但是你必须小心添加控件,以便将它们添加到正确的位置而不是重复。

  • 你不应该写

    CheckBox chk =(CheckBox)Page.FindControl(“chk”);

改为写

var chkControl = Page.FindControl("chk");
if(chkControl != null /*&& check type*/) {
  CheckBox chk = (CheckBox)chkControl;
// and do something
}
  • 最好在设计时使用CheckBoxList Control并更改绑定值以在运行时填充不同的复选框

  • 在设计时创建复选框,并根据用户操作显示隐藏。

希望有所帮助

答案 1 :(得分:0)

您可以使用Request.Forms集合获取值。它保留了表单上每个控件的值。但它适用于name而不是ID

Get dynamic control (unique ID) on postback

更好的方法是使用空CheckBoxList并在运行时添加项目。

这是一个关于CheckBoxList的讨论的链接 How can I get the CheckBoxList selected values, what I have doesn't seem to work C#.NET/VisualWebPart

实施例

创建一个空的

<asp:CheckBoxList ID="ChkBox1" runat="server"></asp:CheckBoxList>

在运行时添加项目

 ChkBox1.Items.Add(new ListItem("Item 1", "Item1"));

您可以使用foreach循环获取数据,如下所示

  // Loop through each item.
    foreach (ListItem item in ChkBox1.Items)
    {
        if (item.Selected)
        {
            // If the item is selected, add the value to the list.

        }
        else
        {
            // Item is not selected, do something else.
        }
    }

答案 2 :(得分:0)

您可以在Page_Load中添加复选框。我认为问题在于使用Page.FindControl。 使用divCusineFilter.FindControl而不是Page.FindControl,并确保在回发中将复选框添加到页面。