[英]How to get cell value of DataGridView by column name?
我有一个带有DataGridView
的 WinForms 应用程序,其中 DataSource 是一个 DataTable(从 SQL Server 填充),它有一列xxx
。 以下代码引发了异常
ArgumentException 未处理。 找不到名为 xxx 的列。
foreach (DataGridViewRow row in Rows)
{
if (object.Equals(row.Cells["xxx"].Value, 123))
}
是否可以通过列名获取单元格值?
DataGridViewColumn
对象具有Name
(仅在表单设计器中显示)和HeaderText
(在列顶部的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;
}
}
然后在你的代码中:
foreach (DataGridViewRow row in Rows)
{
if (object.Equals(row.Cells.GetCellValueFromColumnHeader("xxx"), 123))
{
// ...
}
}
是的,只需删除引号并添加.Index,即
foreach (DataGridViewRow row in Rows)
{
if (object.Equals(row.Cells[xxx.Index].Value, 123))
... ...如果您的列实际上被称为xxx而不是其他名称,如Column1等。您可以独立设置列名称和列标题,因此请检查设计器。
通过执行此操作,您将能够以“xxx”列名称访问当前所选行的单元格。
dataGridView1.SelectedRows[0].Cells["xxx"]
我找到了这个:
样品:
if(dataGridViewProjectList.Rows[dataGridViewProjectList.CurrentCell.RowIndex].Cells["dateendDataGridViewTextBoxColumn"].Value.ToString().Length == 0)
如果你在设计模式中的网格列。 然后列名是gridView ~~~列控件的名称示例:
DataGridViewTextBoxColumn idDataGridViewTextBoxColumn = new DataGridViewTextBoxColumn();
idDataGridViewTextBoxColumn.Name = "idDataGridViewTextBoxColumn";
然后你可以访问这个,你想要的。
row.Cells["idDataGridViewTextBoxColumn"].Value
如果你看看:
row.Cells["xxx"].Value;
这样 :
row.Cells[yourdataGridView.Columns["xxx"].Index].Value;
如果您的 datagridviews 列是具有专用标题文本的动态列,那么您可以为 DGV 的该特定列分配一个名称,如下所示:
dataGridView2.Columns[1].HeaderText = "Invoice No";
dataGridView2.Columns[1].Name = "invoice_no";
然后可以使用该名称作为索引,如下所示:
foreach (DataGridViewRow row in rows_with_checked_column)
{
MessageBox.Show(row.Cells["invoice_no"].Value.ToString());
}
也可以在DataGridview单元格点击事件下试试
TxtTankPainting.Text = DataGridTransfData.Rows[e.RowIndex].Cells["TankPainting"].Value.ToString();
TxtTankPosition.Text = DataGridTransfData.Rows[e.RowIndex].Cells["TankPosition"].Value.ToString();
TxtCorePosition.Text = DataGridTransfData.Rows[e.RowIndex].Cells["CorePosition"].Value.ToString();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.