投射数据网格视图
Casting a datagridview
我有以下代码:
foreach (DataGridViewRow row in dataGridView1.SelectedCells)
{
textBox1.Text += row.Cells[1].Value;
}
您可能会说我正在尝试根据 dataGridView 的选定行遍历特定列。但它在以下行中给我一个错误:
foreach (DataGridViewRow row in dataGridView1.SelectedCells)
错误是:
Additional information: Unable to cast object of type 'System.Windows.Forms.DataGridViewTextBoxCell' to type 'System.Windows.Forms.DataGridViewRow'.
要么使用
foreach (DataGridViewRow row in dataGridView1.SelectedRows)
或者,如果您需要从所选单元格中获取行:
foreach (DataGridViewCell cell in dataGridView1.SelectedCells)
{
DataGridViewRow row = dataGridView1.Rows[cell.RowIndex];
..
}
在你的情况下,第一个解决方案似乎是正确的,(就像 Aaron 写的那样。)
注意两种方案都有一两个问题:
第一个解决方案不会获得自然排序顺序,除非用户注意遵循 windows 选择的怪异规则..
用这个来解决那个问题:
var selectedRowsOrdered = DGV.SelectedRows.Cast<DataGridViewRow>().OrderBy(c => c.Index);
foreach (DataGridViewRow row in selectedRowsOrdered ) textBox1.Text += row[1].Value;
在第二个解决方案中,使用 SelectedCells
集合,此外您还可能有重复项。
也可以使用这个 Linq
来摆脱它们:
var selectedRowsOrdered = DGV.SelectedCells.Cast<DataGridViewCell>()
.Select(c => c).OrderBy(c => c.RowIndex).GroupBy(c => c);
foreach (DataGridViewRow row in selectedRowsOrdered ) textBox1.Text += row[1].Value;
在您的 foreach 中,您试图创建一个 DataGridViewRow 但从 DataGridViewCell 的集合中请求它,这就是您收到错误的原因。而是在 foreach 中使用 DataGridViewCell,然后使用单元格获取行:
foreach (DataGridViewCell cell in dataGridView1.SelectedRows)
{
textBox1.Text += cell.OwningRow.Cells[1].Value;
}
我有以下代码:
foreach (DataGridViewRow row in dataGridView1.SelectedCells)
{
textBox1.Text += row.Cells[1].Value;
}
您可能会说我正在尝试根据 dataGridView 的选定行遍历特定列。但它在以下行中给我一个错误:
foreach (DataGridViewRow row in dataGridView1.SelectedCells)
错误是:
Additional information: Unable to cast object of type 'System.Windows.Forms.DataGridViewTextBoxCell' to type 'System.Windows.Forms.DataGridViewRow'.
要么使用
foreach (DataGridViewRow row in dataGridView1.SelectedRows)
或者,如果您需要从所选单元格中获取行:
foreach (DataGridViewCell cell in dataGridView1.SelectedCells)
{
DataGridViewRow row = dataGridView1.Rows[cell.RowIndex];
..
}
在你的情况下,第一个解决方案似乎是正确的,(就像 Aaron 写的那样。)
注意两种方案都有一两个问题:
第一个解决方案不会获得自然排序顺序,除非用户注意遵循 windows 选择的怪异规则..
用这个来解决那个问题:
var selectedRowsOrdered = DGV.SelectedRows.Cast<DataGridViewRow>().OrderBy(c => c.Index);
foreach (DataGridViewRow row in selectedRowsOrdered ) textBox1.Text += row[1].Value;
在第二个解决方案中,使用 SelectedCells
集合,此外您还可能有重复项。
也可以使用这个 Linq
来摆脱它们:
var selectedRowsOrdered = DGV.SelectedCells.Cast<DataGridViewCell>()
.Select(c => c).OrderBy(c => c.RowIndex).GroupBy(c => c);
foreach (DataGridViewRow row in selectedRowsOrdered ) textBox1.Text += row[1].Value;
在您的 foreach 中,您试图创建一个 DataGridViewRow 但从 DataGridViewCell 的集合中请求它,这就是您收到错误的原因。而是在 foreach 中使用 DataGridViewCell,然后使用单元格获取行:
foreach (DataGridViewCell cell in dataGridView1.SelectedRows)
{
textBox1.Text += cell.OwningRow.Cells[1].Value;
}