错误地删除网格视图行数据Windows窗体我的代码附加?

时间:2013-08-20 18:21:22

标签: c# .net winforms gridview delete-row

我正在尝试删除网格视图数据,因为我正在填充网格,

  public void FillCompanyInfo()
    {
        DataTable dtCompanyInfo = new DataTable();
        dtCompanyInfo = objFunctions.GetCompanyInfo();
        if(dtCompanyInfo.Rows.Count>0)
        {
            dgvCompany.DataSource = dtCompanyInfo;
        }
        if (dtCompanyInfo.Rows.Count > 0)
        {
            if (this.dgvCompany.Columns.Count == 8)
            {
                DataGridViewCheckBoxColumn checkColumn = new DataGridViewCheckBoxColumn();
                checkColumn.Name = "";
                checkColumn.HeaderText = "Select";
                checkColumn.Width = 50;
                checkColumn.ReadOnly = false;
                checkColumn.FillWeight = 10; //if the datagridview is resized (on form resize) the checkbox won't take up too much; value is relative to the other columns' fill values\\
                dgvCompany.Columns.Add(checkColumn);
            }
        }
    }

填充网格后,单击网格行,然后单击删除按钮,

  private void btn_Delete_Click(object sender, EventArgs e)
        {
            foreach (DataGridViewRow r in dgvCompany.Rows)
            {
                if (Convert.ToBoolean(r.Cells[8].Value))  //cells[4] CONTAINS CHECKBOX COLUMN
                {
                    string strId = r.Cells[1].Value.ToString();  //cells[0] CONTAINS EMPIDCOLUMN
                    objFunctions.DeleteCompany(strId);
                }
            }
            FillCompanyInfo();
        }

但它在我的网格视图中错误地删除了数据我得到字段数字和字符串从0到6和chk框在第7位,而在将数据绑定到网格后我还在8处附加了一个列可能我是由于一些原因?

调试时我突然注意到这个地方,

foreach (DataGridViewRow r in dgvCompany.Rows)

那个网格视图有这样的列chk框在零位置然后七个fild再次然后chk框在8位置它如何改变顺序?

希望提前感谢您的建议

1 个答案:

答案 0 :(得分:1)

在绑定之前,您需要清除网格视图数据源。请参阅此链接以清除网格视图。试试这段代码

Datagridview remove all columns

public void FillCompanyInfo()         {

        dataGridView1.DataSource = null;
        dataGridView1.Columns.Clear();
        dtCompanyInfo = GetCompanyInfo();
        if (dtCompanyInfo.Rows.Count > 0)
        {
            dataGridView1.DataSource = dtCompanyInfo;
            DataGridViewCheckBoxColumn checkColumn = new DataGridViewCheckBoxColumn();
            checkColumn.Name = "";
            checkColumn.HeaderText = "Select";
            checkColumn.Width = 50;
            checkColumn.ReadOnly = false;
            checkColumn.FillWeight = 10; //if the datagridview is resized (on form resize) the checkbox won't take up too much; value is relative to the other columns' fill values\\
            dataGridView1.Columns.Add(checkColumn);

        }

    }