从Form1中添加经过过滤的datagridview行到Form2中的空datagridview
本文关键字:datagridview 行到 Form2 过滤 Form1 添加 经过 | 更新日期: 2023-09-27 18:02:24
private void buttonFilterA_Click(object sender, EventArgs e)
{
List<DataGridViewRow> lstRows = new List<DataGridViewRow>();
foreach (DataGridViewRow dr in dataGridView1.Rows)
{
object bloodFiltered = dr.Cells[txtBloodGroup.Index].Value;
if (bloodFiltered != null && bloodFiltered.ToString() == "A")
{
lstRows.Add(dr);
}
}
foreach (DataGridViewRow dr in lstRows)
{
secondForm.dataGridView2.Rows.Add(dr);
}
secondForm.ShowDialog();
}
嗨,伙计们,我在这部分编程中所做的一切都是过滤血型的类型,我想从Form2
中显示另一个空datagridview
。如果我只是删除行,它工作得很好,但是当我在Form2
中添加datagridview
中的行时,我遇到了问题。它就是不工作。
问题是:
An unhandled exception of type 'System.InvalidOperationException' occurred in
System.Windows.Forms.dll
No row can be added to a `DataGridView` control that does not have columns. Columns must be added first.
XXXXXSOLVEDXXXXX
private void buttonFilterA_Click(object sender, EventArgs e)
{
foreach (DataGridViewColumn dc in dataGridView1.Columns)
{
secondForm.dataGridView2.Columns.Add(dc.Name, dc.HeaderText);
}
List<DataGridViewRow> lstRows = new List<DataGridViewRow>();
foreach (DataGridViewRow dr in dataGridView1.Rows)
{
object bloodFiltered = dr.Cells[txtBloodGroup.Index].Value;
if (bloodFiltered != null && bloodFiltered.ToString() == "A")
{
lstRows.Add(dr);
}
}
foreach (DataGridViewRow dr in lstRows)
{
var newRow = (DataGridViewRow)dr.Clone();
foreach (DataGridViewCell cell in dr.Cells)
{
newRow.Cells[cell.ColumnIndex].Value = cell.Value;
}
secondForm.dataGridView2.Rows.Add(newRow);
}
secondForm.ShowDialog();
}
感谢Grant Winney的巨大帮助,现在这段代码能够在Form2的datagridview中显示过滤后的行,而不会中断Form1中datagridview中的原始数据(使用Cell Leave事件序列化)
从你的评论来看,你似乎已经解决了第一个问题——添加列。
你应该能够使用循环复制它们:
foreach (DataGridViewColumn col in dataGridView1.Columns)
dataGridView2.Columns.Add(col.Name, col.HeaderText);
对于第二个错误,您不能从第一个网格直接添加DataRow
到第二个网格,但您可以克隆它,然后添加它。克隆并不复制单元格的值,但是您也可以在循环中这样做。
下面的代码段将第一行从一个网格复制到另一个网格:
var newRow = (DataGridViewRow)dataGridView1.Rows[0].Clone();
foreach (DataGridViewCell cell in dataGridView1.Rows[0].Cells)
newRow.Cells[cell.ColumnIndex].Value = cell.Value;
dataGridView2.Rows.Add(newRow);