C# 如何按列名获取DataGridView的单元格值?
我有一个带有C# 如何按列名获取DataGridView的单元格值?,c#,winforms,datagridviewcolumn,C#,Winforms,Datagridviewcolumn,我有一个带有DataGridView的WinForms应用程序,它的数据源是一个DataTable(由SQL Server填充),其列为xxx。下面的代码引发了的异常 异常未处理。找不到名为xxx的列 是否可以按列名获取单元格值?DataGridViewColumn对象具有名称(仅在表单设计器中显示)和标题文本(显示在列顶部的GUI中)属性。在您的示例中,索引器使用列的Name属性,因此,既然您说这不起作用,我假设您确实在尝试使用列的标题 没有任何内置的东西可以满足您的需要,但是添加起来很容易。
DataGridView
的WinForms应用程序,它的数据源是一个DataTable(由SQL Server填充),其列为xxx
。下面的代码引发了的异常
异常未处理。找不到名为xxx的列
是否可以按列名获取单元格值?
DataGridViewColumn
对象具有名称(仅在表单设计器中显示)和标题文本(显示在列顶部的GUI中)属性。在您的示例中,索引器使用列的Name
属性,因此,既然您说这不起作用,我假设您确实在尝试使用列的标题
没有任何内置的东西可以满足您的需要,但是添加起来很容易。我会使用扩展方法使其易于使用:
public static class DataGridHelper
{
public static object GetCellValueFromColumnHeader(this DataGridViewCellCollection CellCollection, string HeaderText)
{
return CellCollection.Cast<DataGridViewCell>().First(c => c.OwningColumn.HeaderText == HeaderText).Value;
}
}
我发现:
在datagridview上单击鼠标右键
从弹出菜单中选择“编辑列”
选择所需的列。
设计/(名称)-这就是你一直在寻找的
样本:
if(dataGridViewProjectList.Rows[dataGridViewProjectList.CurrentCell.RowIndex].Cells["dateendDataGridViewTextBoxColumn"].Value.ToString().Length == 0)
是的,只需删除引号并添加.Index,即
foreach (DataGridViewRow row in Rows)
{
if (object.Equals(row.Cells[xxx.Index].Value, 123))
…也就是说,如果您的列确实名为xxx,而不是其他名称,如Column1等。您可以独立设置列名和列标题,以便在设计器中进行检查。如果您在设计模式下对列进行网格化。
然后列名是gridView~~~列控件的名称
例如:
DataGridViewTextBoxColumn idDataGridViewTextBoxColumn = new DataGridViewTextBoxColumn();
idDataGridViewTextBoxColumn.Name = "idDataGridViewTextBoxColumn";
然后你可以访问这个权利,你想要的
row.Cells["idDataGridViewTextBoxColumn"].Value
通过这样做,您将能够访问当前选定行的“xxx”列名处的单元格
dataGridView1.SelectedRows[0].Cells["xxx"]
如果你看看:
row.Cells["xxx"].Value;
据此:
row.Cells[yourdataGridView.Columns["xxx"].Index].Value;
只需在助手中获取xxx
索引并使用它,对吗?private int indexOf(DataGridView dgv,string name){return dgv.Columns[name].index;}foreach(DataGridView row in Rows){if(object.Equals(row.Cells[indexOf(dgv,xxx“].Value,123)){//…}
我喜欢此解决方案,因为它具有超强的可扩展性!我需要使用DataPropertyName获取值,因为我的标题文本已被更改,以使表格更可读。此帮助器函数可以直接工作,只需将HeaderText替换为DataPropertyName即可。在VB.NET中如何实现此功能?在VB中,Dominique Mathieu的条目起作用:row.Cells(yourdataGridView.Columns(“xxx”).Index).ValueWell这正是我想要的!非常感谢!)
row.Cells["xxx"].Value;
row.Cells[yourdataGridView.Columns["xxx"].Index].Value;