我正在开发一个应用程序,我需要添加过滤器。 因为过滤选项不是预定义的,所以我会以编程方式添加复选框,这取决于表中的值,我将复选框添加为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;
}
但它给出了未将对象设置为实例的错误。
我不知道如何访问该复选框。
答案 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,并确保在回发中将复选框添加到页面。