0

我正在尝试将第一个 datagridview 中的所有行复制到第二个,但我不希望第一个 datagridview 中的空行,我需要重新格式化第二个 datagridview 的布局。这让我发疯 - 需要帮助。

    private void btnConvert_Click(object sender, EventArgs e)
    {
    dgvData.SelectAll();

    DataTable dt = new DataTable();
        DataColumn dc;
        DataRow dr;

        //build cols
        dc = new DataColumn();
        dc.DataType = System.Type.GetType("System.String");
        dc.ColumnName = "DS";
        dc.Unique = false;
        dt.Columns.Add(dc);

        dc = new DataColumn();
        dc.DataType = System.Type.GetType("System.String");
        dc.ColumnName = "GLAccount";
        dc.Unique = false;
        dt.Columns.Add(dc);

        dc = new DataColumn();
        dc.DataType = System.Type.GetType("System.String");
        dc.ColumnName = "SubAccount";
        dc.Unique = false;
        dt.Columns.Add(dc);

        dc = new DataColumn();
        //dc.DataType = System.Type.GetType("System.DateTime");
        dc.DataType = System.Type.GetType("System.String");
        dc.ColumnName = "Date";
        dc.Unique = false;
        dt.Columns.Add(dc);

        dc = new DataColumn();
        dc.DataType = System.Type.GetType("System.String");
        dc.ColumnName = "Description";
        dc.Unique = false;
        dt.Columns.Add(dc);

        dc = new DataColumn();
        dc.DataType = System.Type.GetType("System.Decimal");
        dc.ColumnName = "Amount";
        dc.Unique = false;
        dt.Columns.Add(dc);

        //build rows
        foreach (DataGridViewRow row in this.dgvData.SelectedRows)
        {
            //how do i prevent copying over the empty row which happens to be the last row in the first datagridview?

        int i;
        i = dgvData.SelectedCells[0].RowIndex; //should this start with the first row?
        int month = 12;
        DateTime y = DateTime.Now;
        int year = y.Year;

        for (int ir = 1; ir <= month; ir++)
        {
            dr = dt.NewRow();
            dr["DS"] = dgvData.Rows[i].Cells[0].Value.ToString();
            dr["GLAccount"] = dgvData.Rows[i].Cells[1].Value.ToString();
            dr["SubAccount"] = dgvData.Rows[i].Cells[2].Value.ToString();

            if (ir == 7)
            {
                dr["Date"] = "1/01/" + (year + 1).ToString();
            }
            else if (ir == 8)
            {
                dr["Date"] = "2/01/" + (year + 1).ToString();
            }
            else if (ir == 9)
            {
                dr["Date"] = "3/01/" + (year + 1).ToString();
            }
            else if (ir == 10)
            {
                dr["Date"] = "4/01/" + (year + 1).ToString();
            }
            else if (ir == 11)
            {
                dr["Date"] = "5/01/" + (year + 1).ToString();
            }
            else if (ir == 12)
            {
                dr["Date"] = "6/01/" + (year + 1).ToString();
            }
            else if (ir == 1)
            {
                dr["Date"] = "7/01/" + year.ToString();
            }
            else if (ir == 2)
            {
                dr["Date"] = "8/01/" + year.ToString();
            }
            else if (ir == 3)
            {
                dr["Date"] = "9/01/" + year.ToString();
            }
            else if (ir == 4)
            {
                dr["Date"] = "10/01/" + year.ToString();
            }
            else if (ir == 5)
            {
                dr["Date"] = "11/01/" + year.ToString();
            }
            else
            {
                dr["Date"] = "12/01/" + year.ToString();
            }

            dr["Description"] = dgvData.Rows[i].Cells[3].Value.ToString();

            if (ir == 7)
            {
                if (dgvData.Rows[i].Cells[10].Value == null || dgvData.Rows[i].Cells[10].Value == "" || dgvData.Rows[i].Cells[10].Value == DBNull.Value)
                {
                    dr["Amount"] = Convert.ToDecimal(0);
                }
                else
                {
                    dr["Amount"] = Convert.ToDecimal(dgvData.Rows[i].Cells[10].Value);
                }
            }
            else if (ir == 8)
            {
                if (dgvData.Rows[i].Cells[11].Value == null || dgvData.Rows[i].Cells[11].Value == "" || dgvData.Rows[i].Cells[11].Value == DBNull.Value)
                {
                    dr["Amount"] = Convert.ToDecimal(0);
                }
                else
                {
                    dr["Amount"] = Convert.ToDecimal(dgvData.Rows[i].Cells[11].Value);
                }
            }
            else if (ir == 9)
            {
                if (dgvData.Rows[i].Cells[12].Value == null || dgvData.Rows[i].Cells[12].Value == "" || dgvData.Rows[i].Cells[12].Value == DBNull.Value)
                {
                    dr["Amount"] = Convert.ToDecimal(0);
                }
                else
                {
                    dr["Amount"] = Convert.ToDecimal(dgvData.Rows[i].Cells[12].Value);
                }
            }
            else if (ir == 10)
            {
                if (dgvData.Rows[i].Cells[13].Value == null || dgvData.Rows[i].Cells[13].Value == "" || dgvData.Rows[i].Cells[13].Value == DBNull.Value)
                {
                    dr["Amount"] = Convert.ToDecimal(0);
                }
                else
                {
                    dr["Amount"] = Convert.ToDecimal(dgvData.Rows[i].Cells[13].Value);
                }
            }
            else if (ir == 11)
            {
                if (dgvData.Rows[i].Cells[14].Value == null || dgvData.Rows[i].Cells[14].Value == "" || dgvData.Rows[i].Cells[14].Value == DBNull.Value)
                {
                    dr["Amount"] = Convert.ToDecimal(0);
                }
                else
                {
                    dr["Amount"] = Convert.ToDecimal(dgvData.Rows[i].Cells[14].Value);
                }
            }
            else if (ir == 12)
            {
                if (dgvData.Rows[i].Cells[15].Value == null || dgvData.Rows[i].Cells[15].Value == "" || dgvData.Rows[i].Cells[15].Value == DBNull.Value)
                {
                    dr["Amount"] = Convert.ToDecimal(0);
                }
                else
                {
                    dr["Amount"] = Convert.ToDecimal(dgvData.Rows[i].Cells[15].Value);
                }
            }
            else if (ir == 1)
            {
                if (dgvData.Rows[i].Cells[4].Value == null || dgvData.Rows[i].Cells[4].Value == "" || dgvData.Rows[i].Cells[4].Value == DBNull.Value)
                {
                    dr["Amount"] = Convert.ToDecimal(0);
                }
                else
                {
                    dr["Amount"] = Convert.ToDecimal(dgvData.Rows[i].Cells[4].Value);
                }
            }
            else if (ir == 2)
            {
                if (dgvData.Rows[i].Cells[5].Value == null || dgvData.Rows[i].Cells[5].Value == "" || dgvData.Rows[i].Cells[5].Value == DBNull.Value)
                {
                    dr["Amount"] = Convert.ToDecimal(0);
                }
                else
                {
                    dr["Amount"] = Convert.ToDecimal(dgvData.Rows[i].Cells[5].Value);
                }
            }
            else if (ir == 3)
            {
                if (dgvData.Rows[i].Cells[6].Value == null || dgvData.Rows[i].Cells[6].Value == "" || dgvData.Rows[i].Cells[6].Value == DBNull.Value)
                {
                    dr["Amount"] = Convert.ToDecimal(0);
                }
                else
                {
                    dr["Amount"] = Convert.ToDecimal(dgvData.Rows[i].Cells[6].Value);
                }
            }
            else if (ir == 4)
            {
                if (dgvData.Rows[i].Cells[7].Value == null || dgvData.Rows[i].Cells[7].Value == "" || dgvData.Rows[i].Cells[7].Value == DBNull.Value)
                {
                    dr["Amount"] = Convert.ToDecimal(0);
                }
                else
                {
                    dr["Amount"] = Convert.ToDecimal(dgvData.Rows[i].Cells[7].Value);
                }
            }
            else if (ir == 5)
            {
                if (dgvData.Rows[i].Cells[8].Value == null || dgvData.Rows[i].Cells[8].Value == "" || dgvData.Rows[i].Cells[8].Value == DBNull.Value)
                {
                    dr["Amount"] = Convert.ToDecimal(0);
                }
                else
                {
                    dr["Amount"] = Convert.ToDecimal(dgvData.Rows[i].Cells[8].Value);
                }
            }
            else
            {
                if (dgvData.Rows[i].Cells[9].Value == null || dgvData.Rows[i].Cells[9].Value == "" || dgvData.Rows[i].Cells[9].Value == DBNull.Value)
                {
                    dr["Amount"] = Convert.ToDecimal(0);
                }
                else
                {
                    dr["Amount"] = Convert.ToDecimal(dgvData.Rows[i].Cells[9].Value);
                }
            }

            dt.Rows.Add(dr);
        }
      }

        //bind
        dgvConverted.DataSource = dt;
    }
4

2 回答 2

1

row.IsNewRow在循环开始时使用foreach以检查正在复制的行是否为空白行。

添加的代码示例

foreach (DataGridViewRow row in this.dgvData.SelectedRows)
  {
   if (!row.IsNewRow)
     {
        //Your other code here
     }
   }

我不确定你为什么使用i迭代器,因为你可以简单地使用row.Cells[]而不是dgvData.Rows[i].Cells[]

于 2012-08-15T14:24:38.397 回答
0

问题是您正在使用foreach循环然后获取错误的行索引。

只需使用for循环并具有适当的索引。

于 2012-08-15T15:51:09.477 回答