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();
}
大家好,我在编程的这一部分所做的就是过滤血型的类型,我想在datagridview
的另一个空Form2
中显示它。如果我只删除行,它会很好用,但是当我在datagridview
中的Form2
内添加行时遇到了问题。它只是没有用。
问题在于:
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事件序列化)。
答案 0 :(得分:0)
从您的评论中,您似乎已经找到了第一个问题 - 添加列。
您应该能够使用循环复制它们:
foreach (DataGridViewColumn col in dataGridView1.Columns)
dataGridView2.Columns.Add(col.Name, col.HeaderText);
对于第二个错误,您无法将第一个网格中的DataRow
直接添加到第二个错误,但您可以克隆它然后添加它。克隆doesn't copy the cells values,但你也可以在循环中完成。
此代码段将第一行从一个网格克隆到另一个网格:
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);