从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事件序列化)

从Form1中添加经过过滤的datagridview行到Form2中的空datagridview

从你的评论来看,你似乎已经解决了第一个问题——添加列。

你应该能够使用循环复制它们:

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);