我使用@Tim Schmelter代码(Creating Gridview column Header by loading data from database)为ItemTemplate复选框工作正常但是当使用HeaderTemplate时,我在ITemplate收到错误 - > CB_DataBinding - > object dataValue =((DataRowView)container.DataItem)[_ columnName];因为DataItem是空的,所以说NullReference。 mycode的:
private void CreateGridColumns()
{
var tblAllowanceGroup = GetAllowanceGroup();
foreach (DataRow row in tblAllowanceGroup.Rows)
{ ...
field.HeaderTemplate = new GridViewCheckBoxTemplate(ListItemType.Header, AllowanceGroupName);
gvEmpSalaryStructure.Columns.Add(field);
}
private void BindGrid()
{
var tblAllowanceGroup = GetAllowanceGroup();
DataSet dsgrid = new DataSet();
DataTable dtgrid = new DataTable();
var empRow = dtgrid.NewRow();
dtgrid.Columns.Add("EmpName");
foreach (DataRow row in tblAllowanceGroup.Rows)
{
String AllowanceGroupName = row.Field<String>("AllowanceName");
//Add column from domain-name
dtgrid.Columns.Add(AllowanceGroupName, typeof(bool));
//CheckBox-Checked is a boolean
//This gives me only Header Text of Gridview
}
我希望GridView动态生成包含Checkboxes的Headers。如果我想让ITemplate CB_DataBinding与ListItemType.Header一起使用,那么我想要改变。
当我们选中Header列中的复选框时,应该检查该列中的所有复选框。
先谢谢。
答案 0 :(得分:1)
您可以使用gridview的OnRowDataBound
事件来循环标题行并在每个Cell中插入CheckBox。
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.Header)
{
for (int i = 0; i < e.Row.Cells.Count; i++)
{
CheckBox checkBox = new CheckBox();
checkBox.CssClass = "headerCheckBox";
checkBox.ID = "headerCheckBox_" + i;
e.Row.Cells[i].Controls.Add(checkBox);
}
}
}
现在你可以将一个jQuery监听器绑定到CheckBox类来处理整个列的检查/取消检查。