在asp.net gridview数据控件里面动态增加一个checkbox 控件。代码如下:private string strColumnName;
private DataControlRowType dcrtColumnType;
/// <summary>
/// 动态添加模版列
/// </summary>
/// <param name="strColumnName">列名</param>
/// <param name="dcrtColumnType">列的类型</param>
public GenGridTemplateUtil(string strColumnName, DataControlRowType dcrtColumnType)
{
this.strColumnName = strColumnName;
this.dcrtColumnType = dcrtColumnType;
} /// <summary>
/// 生成girdview列
/// </summary>
/// <param name="ctlContainer"></param>
public void InstantiateIn(System.Web.UI.Control ctlContainer)
{ switch (dcrtColumnType)
{
case DataControlRowType.Header: //列标题
Literal ltr = new Literal();
ltr.Text = strColumnName;
ctlContainer.Controls.Add(ltr);
break;
case DataControlRowType.DataRow: //模版列内容——加载CheckBox
CheckBox cb = new CheckBox();
cb.ID = "CheckBox";
// cb.AutoPostBack = true;
cb.Checked = false;
ctlContainer.Controls.Add(cb);
break;
}
} TemplateField Field = new TemplateField();
Field.HeaderText = "选择";
Field.ShowHeader = true;
Field.HeaderTemplate = new GenGridTemplateUtil("选择", DataControlRowType.Header);
Field.ItemTemplate = new GenGridTemplateUtil("", DataControlRowType.DataRow);
this.grid_list.Columns.Insert(0, Field);然后我用这段代码判断checkbox的值 无法取到,大家帮看看问题出现在什么东西,增加checkBOX的方法在pageload里面调用的//GridView gridview = this.Page_List.FindControl("grid_list") as GridView;
//if (gridview != null)
//{
// for (int i = 0; i < gridview.Rows.Count; i++)
// {
// CheckBox CheckBox = gridview.Rows[i].Cells[0].FindControl("CheckBox") as CheckBox;
// if(CheckBox!=null)
// {
// if (CheckBox.Checked)
// {
// Id += gridview.Rows[i].Cells[1].Text.Trim();
// Id += "&";
// }
// }
// }
//}
private DataControlRowType dcrtColumnType;
/// <summary>
/// 动态添加模版列
/// </summary>
/// <param name="strColumnName">列名</param>
/// <param name="dcrtColumnType">列的类型</param>
public GenGridTemplateUtil(string strColumnName, DataControlRowType dcrtColumnType)
{
this.strColumnName = strColumnName;
this.dcrtColumnType = dcrtColumnType;
} /// <summary>
/// 生成girdview列
/// </summary>
/// <param name="ctlContainer"></param>
public void InstantiateIn(System.Web.UI.Control ctlContainer)
{ switch (dcrtColumnType)
{
case DataControlRowType.Header: //列标题
Literal ltr = new Literal();
ltr.Text = strColumnName;
ctlContainer.Controls.Add(ltr);
break;
case DataControlRowType.DataRow: //模版列内容——加载CheckBox
CheckBox cb = new CheckBox();
cb.ID = "CheckBox";
// cb.AutoPostBack = true;
cb.Checked = false;
ctlContainer.Controls.Add(cb);
break;
}
} TemplateField Field = new TemplateField();
Field.HeaderText = "选择";
Field.ShowHeader = true;
Field.HeaderTemplate = new GenGridTemplateUtil("选择", DataControlRowType.Header);
Field.ItemTemplate = new GenGridTemplateUtil("", DataControlRowType.DataRow);
this.grid_list.Columns.Insert(0, Field);然后我用这段代码判断checkbox的值 无法取到,大家帮看看问题出现在什么东西,增加checkBOX的方法在pageload里面调用的//GridView gridview = this.Page_List.FindControl("grid_list") as GridView;
//if (gridview != null)
//{
// for (int i = 0; i < gridview.Rows.Count; i++)
// {
// CheckBox CheckBox = gridview.Rows[i].Cells[0].FindControl("CheckBox") as CheckBox;
// if(CheckBox!=null)
// {
// if (CheckBox.Checked)
// {
// Id += gridview.Rows[i].Cells[1].Text.Trim();
// Id += "&";
// }
// }
// }
//}
//if (gridview != null)
//{ ......你可以直接用js获取CheckBox的值.
debug时候,看一下cell里面有checkbox吗?
还能这么写?
在服务器端写这个没用过,建议你可以考虑用js来写
然后在页面里面先找到用户控件的gridview ID,然后在从过找到的gridview来找这个里面checkbox选择的值。
除了JS没有解决办法了吗?
cb.Checked = false;
这上面句我觉得都没什么必要,默认就是没有选择的,第二,确定你的gridview已经得到,然后就是你的checkbox的ID换个名称试试!
再不行的话,你把这段代码改下看看:
CheckBox CheckBox =(CheckBox)gridview.Rows[i].Cells[0].Controls[0];
看看,还报错的话,你贴出来!
但是可以通过GridView.Rows[i].Cell[j].Controls[k]获取到,在表格中只有1个控件时k=0,如果0取不到,你可以查看网页源文件来看此控件在cell中的位置