2014-08-28 78 views
0

我想创建一个带有动态列的gridview,这个列由复选框组成,复选框必须能够触发一个onchange事件。在gridview列中动态添加复选框

protected void Page_Load(object sender, EventArgs e) { 
LoadTable(); 
} 

LoadTables() - 根据用户订阅的模块列表动态创建列。

private void LoadTable() 
{ 
    List<Module> ListModule = getModules(UserID); 
    foreach (Module m in ListModule) 
    { 
     TemplateField tfield = new TemplateField(); 
     tfield.HeaderText = m.ModuleName; 
     gv.Columns.Add(tfield); 
    } 
    gv.DataBind(); 
} 

OnTheRowBound,复选框被创建并添加到表中。我如何添加复选框的触发事件?

protected void OnRowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     List<Module> ListModule = getModules(UserID); 
     int i = 2; // cell postioning 
     foreach (Module m in ListModule) 
     { 
      CheckBox cbActive = new CheckBox(); 
      cbActive.ID = m.ModuleIDs; 
      cbActive.Checked = Convert.ToBoolean((e.Row.DataItem as DataRowView).Row["isActive"].ToString()); 
      //How do i add an onCheckChanged event to trigger whenever the checkbox value is changed? 
      //Something like: cbActive.CheckedChanged = "SelectCheckBox_OnCheckedChanged" 
      cbActive.AutoPostBack = true; 
      e.Row.Cells[i].Controls.Add(cbActive); 
      i++; 
     } 
    } 
} 


protected void SelectCheckBox_OnCheckedChanged(object sender, EventArgs e) 
{ 
    //Update Database. 
} 

我做错了吗?有没有更好的方法来创建这个功能?

+1

它看起来没问题,只要它工作。你有什么问题吗?您可以使用cbActive.CheckedChanged + = SelectCheckBox_OnCheckedChanged注册事件; – 2014-08-28 09:45:33

+0

好的男人它工作!你能回答这个问题吗?我可以接受它。 – 2014-08-28 09:55:58

回答

2

就发布这个作为回答,而不是评论

您可以用下面的代码

cbActive.CheckedChanged += SelectCheckBox_OnCheckedChanged 
注册事件

其他部分应该没问题。

1

试试这个:

cbActive.CheckedChanged += new EventHandler(cbActive_CheckedChanged); 

处理程序:

protected void cbActive_CheckedChanged(object sender, EventArgs e) 
{ 
    //your code here... 
}