2009-12-24 40 views
4

我试图将另一个eventHandler添加到RadioButton。这是示例代码(这是工作):在动态表中添加RadioButton CheckedChanges中的新事件处理程序

ASP.NET:

<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> 
<asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder> 
<asp:Button ID="Button1" runat="server" Text="Button" /> 

C#:

protected void Page_Load(object sender, EventArgs e) 
{ 
    RadioButton RB1 = new RadioButton(); 
    RB1.ID = "1"; 
    RB1.GroupName = "bla"; 
    RB1.CheckedChanged += new EventHandler(CheckedChanged); 
    RadioButton RB2 = new RadioButton(); 
    RB2.ID = "2"; 
    RB2.GroupName = "bla"; 
    RB2.CheckedChanged += new EventHandler(CheckedChanged); 
    PlaceHolder1.Controls.Add(RB1); 
    PlaceHolder1.Controls.Add(RB2); 

} 
protected void CheckedChanged(object sender, EventArgs e) 
{ 
    Label1.Text = ((RadioButton)sender).ID; 
} 

在项目中,我的RadioButtons动态创建(行的数量我从数据库中获取)。同样加入eventHandler不工作,但如果我写

MyRadioButton.Load += new EventHandler(Another_method); 

Another_method将启动,但在

MyRadioButton.CheckedChanged += new EventHandler(Main_method); 

如果我选择了RadioButtons之一Main_method将无法​​启动。 有什么不对?


@KevinP 这是我的代码:

Table tb1 = new Table(); 
    PlaceHolder1.Controls.Add(tb1); 
    TableRow tr = new TableRow(); 
    TableCell tc = new TableCell(); 
    //adding the first row with title" 
    tr.Cells.Add(tc); 
    for (int i = 0; i < ((ArrayList)(result[0])).Count; i++) 
    { 
     tc = new TableCell(); 
     Label example = new Label(); 
     example.Text = ((columnsResultFromSqlClients)(i)).ToString(); 
     tc.Controls.Add(example); 
     tr.Cells.Add(tc); 
    } 
    tb1.Rows.Add(tr); 
    //filling the table 
    for (int i = 0; i < result.Count; i++) 
    { 
     tr = new TableRow(); 
     tc = new TableCell(); 
     //adding radio button 
     RadioButton RB = new RadioButton(); 
     RB.Attributes.Add("value", ((ArrayList)(result[i]))[0].ToString()); 
     RB.GroupName = "for_selecting"; 
     RB.ID = ((ArrayList)(result[i]))[0].ToString(); 
     RB.CheckedChanged += new EventHandler(RB_CheckedChanged2); 
     //RB.AutoPostBack = true; 

     RB.Attributes.Add("AutoPostBack", "True"); 
     tc.Controls.Add(RB); 
     tr.Cells.Add(tc); 
     //adding content 
     for (int j = 0; j < ((ArrayList)(result[i])).Count; j++) 
     { 
      tc = new TableCell(); 
      Label example = new Label(); 
      example.Text = ((ArrayList)(result[i]))[j].ToString(); 
      tc.Controls.Add(example); 
      tr.Cells.Add(tc); 
     } 
     tb1.Rows.Add(tr); 
    } 

如果我使用RB.AutoPostBack = true;,我没有时间按下按钮提交我的选择,导致页面当我点击一个会重新加载的单选按钮。 另外,RB_CheckedChanged2代码:

protected void RB_CheckedChanged2(object sender, EventArgs e) 
{ 
    RadioButton tempRB = (RadioButton)sender; 
    if (tempRB.Checked) 
    { 
     selected_id = tempRB.ID; 
    } 
} 

select_idstatic int varible与非标准值= “-1”。

回答

1

如果我没有弄错,在ASP.Net中使用动态控件,您需要在回发中“重新连接”它们的事件。请记住,在回传中,动态控件不再存在。你必须重新创建它们。

相关问题