如何安全地访问DataGridView列名?

Tee*_*tow 4 .net datagridview winforms

在操作DataGridView单元格时,通常会执行以下操作:

MyGrid.CurrentRow.Cells["EmployeeFirstName"].Value = "John";
Run Code Online (Sandbox Code Playgroud)

这一切都很好,花花公子,但随着复杂性的增加,你开始担心拼写错误,重构问题等.

从历史上看,我只是将列公开,所以我可以直接在类实例中访问它们,但是我必须与想要将它们保密的Windows Forms设计器进行斗争(据说这是一种很好的做法).

我目前的解决方案是有一个名为Cols的类,带有一串字符串:

public static class Cols
{
    public static string EmployeeFirstName = "EmployeeFirstName";
    ...
}
Run Code Online (Sandbox Code Playgroud)

结果如下:

MyGrid.CurrentRow.Cells[Cols.EmployeeFirstName].Value = "John";
Run Code Online (Sandbox Code Playgroud)

这给了我一些IntelliSense的好处,而不是等待运行时错误.尽管如此,它似乎仍然模糊不清.

有没有更方便的方法来做到这一点?

Joe*_*Joe 6

如果您在设计时创建了列,则可以为它们提供合理的名称,例如employeeFirstNameColumn.

然后你可以使用以下内容进入单元格:

MyGrid.CurrentRow.Columns[employeeFirstNameColumn.Name]
Run Code Online (Sandbox Code Playgroud)

或者可能:

MyGrid.CurrentRow.Columns[employeeFirstNameColumn.Index]
Run Code Online (Sandbox Code Playgroud)

如果您正在动态生成列(AutoGenerateColumns = true),那么您将拥有基于您绑定的数据源的列索引的列索引.因此,您可以使用类似的技巧来派生索引(特别是如果您的数据源是强类型的DataSet).