2

伙计们,我正在尝试获取具有特定列标题的列的索引。直到现在我得

int index_of = grid_statement.Columns[the_name].Index;

但它会引发 NullReference 异常。

还有其他方法可以获取该索引吗?(the_name 是具有列标题的变量)

4

3 回答 3

3

如果您试图通过其名称获取列,那么您的网格为空,或者您的网格中没有名称等于的列the_name。在这两种情况下,您都无法获得不存在列的索引。为了避免在没有提供名称的列的情况下出现异常,您可以在尝试获取其索引之前检查列是否存在。

var column = grid_statement.Columns[the_name];
int index_of = column == null ? -1 : column.Index;

如果您尝试通过其标题文本(与列名不同)获取列,则应搜索具有相同标题的列。如果找到列,则获取它的索引:

var column = grid_statement.Columns
                .Cast<DataGridViewColumn>()
                .FirstOrDefault(c => c.HeaderText == the_name);

int index_of = column == null ? -1 : column.Index;
于 2013-09-02T09:51:26.410 回答
2

试试这个它会帮助你

int index_of = grid_statement.CurrentRow.Cells["ColumnName"].ColumnIndex;
于 2013-09-02T09:53:25.110 回答
1

您可能正在尝试在绑定数据源之前访问列集合。此时gridview不会有任何列。分配数据源并绑定网格,然后检查列的索引。

grid_statement.DataSource = dataTable;
grid_statement.DataBind();
int index_of = grid_statement.Columns[the_name].Index;

为避免异常,您应首先检查是否有列,然后获取其索引。

int index_of = -1; 
if(grid_statement.Columns[the_name] != null)
    index_of = grid_statement.Columns[the_name].Index;
于 2013-09-02T09:48:29.630 回答