我正在动态地向gridview添加一列...它是一列复选框 - 用户检查它们以确定要打印哪一行。我希望能够在不使用数字索引的情况下获取对单元格的引用:
if (e.Row.RowType == DataControlRowType.DataRow)
{
if (e.Row.Cells[4].Controls.Count == 0)
{
CheckBox cbPrint = new CheckBox();
cbPrint.ID = "chkPrint";
cbPrint.Checked = false;
e.Row.Cells[4].Controls.Add(cbPrint); <--- this line
}
}
我希望能像e.Row.Cells [“Print”]一样使用“Print”,就像你可以使用DataSet中的列一样 - 例如:ds.Tables [0] .Rows [3] [“打印“],其中print指定列。我希望能够这样做,因为打印列可能不在每个GridView中的相同位置,并且使用数字索引可能无法一直工作。有没有办法使用字符串列引用获取单元格?
答案 0 :(得分:0)
这就是我想到的......我写了一个小函数来根据标题文本获取列的索引。
GridView gv = (GridView)sender //inside OnRowDataBound
if (e.Row.RowType == DataControlRowType.DataRow)
{
if (e.Row.Cells[GetIndex(gv, "Print")].Controls.Count == 0)
{
CheckBox cbPrint = new CheckBox();
cbPrint.ID = "chkPrint";
cbPrint.Checked = false;
e.Row.Cells[GetIndex(gv, "Print")].Controls.Add(cbPrint);
}
}
GetIndex方法:
public static int GetIndex(GridView gv, string columnText)
{
for (int i = 0; i < gv.Columns.Count; i++)
if (gv.Columns[i].HeaderText == columnText)
return i;
return -1;
}
如果包含该标题文本的列,则它将返回索引。如果没有,那么它将返回-1并且您将收到错误...因此如果您不知道该列是否存在,则需要进行一些错误处理。