通过字符串而不是索引获取Gridview Cell的列引用

时间:2011-04-08 15:23:16

标签: gridview

我正在动态地向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中的相同位置,并且使用数字索引可能无法一直工作。有没有办法使用字符串列引用获取单元格?

1 个答案:

答案 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并且您将收到错误...因此如果您不知道该列是否存在,则需要进行一些错误处理。