2013-04-25 75 views
0

我想添加一個複選框,標籤和DDL到ASP.NET頁面(aspx)從我在C#中的後面的類。我一直在使用LiteralControl _liText = new LiteralControl();來附加標籤,以便我可以在CreateChildControls()方法中使用this.Controls.Add(_liText);來顯示它們。如何以編程方式將CheckBox,Label和DDL添加到ASP.NET頁面?

如何將DDL和複選框添加到C#代碼的ASp.NET頁面,以便我的標籤與DDL和複選框位於同一行中?

我一直在使用這種語法已經取得DDL:

List<DropDownList> _ddlCollection=new List<DropDownList>(); 
for (int i = 0; i < 5; i++) 
      { 
       _ddlCollection.Add(new DropDownList()); 
      } 

問題並不在this.Controls.Add()這是我從的CreateChildControls()調用。這是OnPreRender()方法,我填寫ddl和複選框。 LiteralControl類對此很好嗎?這是我在OnPReRender()中試過的:

foreach (SPList list in web.Lists) 
      { 
       if (!list.Hidden) 
       { 
        _liText.Text += @<input type="checkbox">; 
        _liText.Text += list.Title + "<br />"; 

       } 
      } 

回答

1

首先,你應該添加一個佔位符。

<form id="form1" runat="server"> 
    <asp:PlaceHolder runat="server" ID="phMain"></asp:PlaceHolder> 
</form> 

接下來,如果你有加入一行使用表(這是一個簡單但不推薦的方法,下一步中添加的所有頁面和設置CSS樣式的頁面)。

protected override void CreateChildControls() 
{ 
    base.CreateChildControls(); 
    Table table = new Table(); 
    for (int i = 0; i < 3; i++) 
    { 
     TableRow tr = new TableRow(); 

     TableCell tc1 = new TableCell(); 
     tc1.Controls.Add(new LiteralControl(String.Format("Line {0}",i))); 
     tr.Cells.Add(tc1); 

     TableCell tc2 = new TableCell(); 
     CheckBox chb = new CheckBox(); 
     chb.ID = String.Format("CheckBox_{0}", i); 
     chb.Text = String.Format("CheckBox {0}", i); 
     chb.CheckedChanged += chb_CheckedChanged; 
     chb.AutoPostBack = true; 
     tc2.Controls.Add(chb); 
     tr.Cells.Add(tc2); 

     TableCell tc3 = new TableCell(); 
     DropDownList ddl = new DropDownList(); 
     ddl.ID = String.Format("DropDownList_{0}", i); 
     ddl.Items.Add("1111"); 
     ddl.Items.Add("2222"); 
     ddl.Items.Add("3333"); 
     ddl.SelectedIndex = i; 
     ddl.Enabled = false; 
     tc3.Controls.Add(ddl); 
     tr.Cells.Add(tc3); 


     table.Rows.Add(tr); 
    } 
    phMain.Controls.Add(table); 
} 

void chb_CheckedChanged(object sender, EventArgs e) 
{ 
    CheckBox chb = sender as CheckBox; 
    string ddlid = chb.ID.Replace("CheckBox", "DropDownList"); 
    DropDownList ddl = this.Page.FindControl(ddlid) as DropDownList; 
    if (ddl != null) 
    { 
     ddl.Enabled = chb.Checked; 
    } 
} 
+0

我建議你不要使用表格,因爲這在語義上是不正確的。表格是表格數據。 – skyfoot 2013-04-25 10:17:31

+0

你能告訴我如何將Event與每個複選框連接起來嗎?在intelisense中Ther沒有OnItemChecked方法 – 2013-04-25 12:37:59

2

您的控件存在,但頁面或用戶控件不知道它們。

您需要將控件添加到頁面

Page.Controls.Add(_ddlCollection); 

您還可以添加控件其他控件的頁面上,例如面板。

panel1.Controls.Add(_ddlCollection); 

你正在添加一個下拉列表,我不認爲是你想要的。 您需要改爲添加ListItems。

var dropDown = new DropDownList {Id = "dropDown1"}; 
dropDown.Items.Add(new ListItem("text", "value"); 

Page.Controls.Add(dropDown); 

爲下拉菜單添加標籤。

Page.Controls.Add(new Label {AssociatedControlId = dropDown.Id, Text = "Drop me down"}); 

您的其他控制遵循相同的過程:

添加一個複選框 不要一個html控件添加到文字,除非這就是你想要真的是。 如果你想能夠在後面的代碼中訪問該複選框,那麼你需要將它添加爲一個asp.net控件。用戶佔位符。

placeHolder1.Controls.Add(new CheckBox {Id = "chkBox", Text="Tick me"}); 

複選框的text屬性將是複選框的標籤,並在單擊文本時勾選/取消勾選複選框。

輸出應該是

<label for="dropDown1" >Drop me down</label> 
<select id="dropDown1" > 
    <option value="value" >text</option> 
</select>  

<input type="checkbox" id="chkbox" /> 
<label for="chkbox" >Tick me</label> 
相關問題