簡體   English   中英

如何訪問以編程方式添加的復選框

[英]How to Access Programmatically Added checkbox

我正在開發一個需要添加過濾器的應用程序。 為此,由於過濾選項未預先定義,因此以編程方式添加復選框,這取決於表中的值,我將復選框添加為休假

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

但它給出了對象未設置為實例的錯誤。

我不知道要訪問該復選框。

有一些限制:

  • 您無法訪問ASP.net中沒有在Init之前或之前添加的任何控件。 因此,您可以在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控件並在運行時更改綁定值以填充不同的復選框會更好。

  • 在設計時創建復選框,並根據用戶操作顯示隱藏。

希望能幫助到你

您可以使用Request.Forms集合獲取值。 它保留窗體上每個控件的值。 但是它只作用於name而不作用於ID

在回發中獲取動態控制(唯一ID)

更好的方法是使用空的CheckBoxList並在運行時添加項目。

這是一個有關CheckBoxList的鏈接
如何獲取CheckBoxList選定的值,我所擁有的似乎不起作用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.
        }
    }

您可以在Page_Load中添加您的復選框。 我認為問題出在使用Page.FindControl。 使用divCusineFilter.FindControl而不是Page.FindControl,並確保您也將復選框添加到回發頁面中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM