0

任何人都可以举例说明如何将行从一个 Datagridview 复制到另一个 DataGridView,其中行是前色是红色。

我在网上看到它们是相关的选定行复制。但我必须只复制前色为红色的行。

我正在使用的这段代码:

               int k = 0;
            foreach (DataGridViewColumn c in dgdPrview.Columns)
            {
                dgdMissingAcc.Columns.Add(c.Clone() as DataGridViewColumn);
            }
            foreach (DataGridViewRow dgvRow in dgdPrview.Rows)
            {
     if (dgdPrview.Rows[k][0].Cells[1].Style.ForeColor == System.Drawing.Color.Red)
                {                        
                  dgdMissingAcc.Rows.Add(dgvRow); //Error:Row provided already belongs to a DataGridView control.
                    k++;

                }
            }
          dgdMissingAcc.Show();

// 更新了第二个 foreach 循环:

  foreach (DataGridViewRow dgvRow in dgdPrview.Rows)
            {
                var cellcount = dgdPrview.ColumnCount; //here I take the column count not the row count.
                if (dgdPrview.Rows[k][0].Cells[1].Style.ForeColor == System.Drawing.Color.Red)
                {

                    for (int i = 0; i < cellcount; i++)
                    {
                       dgdMissingAcc.Rows[k][0].Cells[i].Value = dgdPrview.CurrentRow.Cells[i].Value.ToString();

                    }
                }
                k++;
            }

当我来到第三行时,索引超出范围异常。让我知道为什么会出现此错误。

4

2 回答 2

0

试着把条件大致像

if(gridview.CellStyle.ForeColor == Color.Red)
{
}

这可以根据单元格样式或行样式而有所不同...

请参考链接,以便您对事情有更多的了解>>>

http://www.daniweb.com/software-development/vbnet/threads/320268/datagridview-color-change-based-on-condition

int k = 0;
            foreach (DataGridViewColumn c in dgdPrview.Columns)
            {
                dgdMissingAcc.Columns.Add(c.Clone() as DataGridViewColumn);
            }

            for(int i=0;i<dgdPrview.rows.count;i++)
            {
     if (dgdPrview.Rows[k].Cells[i].Style.ForeColor == System.Drawing.Color.Red)
                {                        
                  dgdMissingAcc.Rows[i].Cells[i].Value=dgdPrview.CurrentRow.Cells[i].value.toString();
                }
            }
          dgdMissingAcc.Show();
于 2012-09-24T04:37:09.370 回答
0

我想,你想要这样:

    private DataGridView CopyWhereForeColorIsRed(DataGridView dgv)
    {
        var dgv2 = new DataGridView();
        dgv2.Rows.AddRange(dgv.Rows
            .Cast<DataGridViewRow>()
            .Where(a=>a.Cells.Cast<DataGridViewCell>().Any(c=>c.Style.ForeColor == Color.Red))
            .ToArray());

        return dgv2;
    }
于 2012-09-24T04:37:16.503 回答