private void dgvData_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            string Area = this.dgvData.Rows[e.RowIndex].Cells["Area"].Value.ToString();    //获取区域列值
            string Locate = this.dgvData.Rows[e.RowIndex].Cells["Location"].Value.ToString();  //获取位置列值            if (Area != "" && Locate != "")   //判断都不为空
            {
                bool isNo = false;  //用于判断该区域和位置是否存在
                for (int i = 0; i < this.dgvData.Rows.Count - 2; i++)
                {
                    if (Area == dgvData.Rows[i].Cells["Area"].Value.ToString() && Locate == dgvData.Rows[i].Cells["Location"].Value.ToString())   //判断该区域和位置是否已经存在
                    {
                        isNo = true;  //已存在
                        break;
                    }
                }                if (isNo == true)   //如果存在可选择是否覆盖
                {
                    if (MessageBox.Show("该区域中的位置已经存在!是否覆盖?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1) == DialogResult.OK)
                    {
                        for (int i = 0; i < this.dgvData.Rows.Count; i++)
                        {
                            if (this.dgvData.Rows[i].Cells["Area"].Value.ToString() == Area && this.dgvData.Rows[i].Cells["Location"].Value.ToString() == Locate)
                            {
                               // this.dgvData.Rows[i + 2].Selected = true;
                                this.dgvData.Rows.RemoveAt(i);  //存在,移除已经存在的                                break;
                            }
                        }
                    }
                    else
                    {
                        this.dgvData.Rows.RemoveAt(e.RowIndex);   //选择不覆盖则移除添加的行
                    }
                }
            }
        }当添加一条已经存在的。
选择不覆盖,则会把当前的移除。
选择覆盖,会把已经存在的移除。但是当前添加的也没有了???
这是什么情况??   求大侠帮忙DataGridView

解决方案 »

  1.   

    for (int i = this.dgvData.Rows.Count-1; i >= 0; i--)
    删除要倒着来
      

  2.   

    你把dgv转成dt,结合dataview来判断是否有相同的数据,你这样判断数据不准确
      

  3.   

    不能用dt,如果用dt的话  我连续添加2条一样的也不会报错。
    我用的是
     SqlDataAdapter adp = new SqlDataAdapter("select ShelfID,Area,GroupGoods,Location,SegmentNum from dbo.ShelfInformation", DBHelp.Connection);
                SqlCommandBuilder builder = new SqlCommandBuilder(adp);
                adp.Fill(dt);
                adp.Update(dt);
      

  4.   

    不能用dt,如果用dt的话  我连续添加2条一样的也不会报错。
    我用的是
     SqlDataAdapter adp = new SqlDataAdapter("select ShelfID,Area,GroupGoods,Location,SegmentNum from dbo.ShelfInformation", DBHelp.Connection);
                SqlCommandBuilder builder = new SqlCommandBuilder(adp);
                adp.Fill(dt);
                adp.Update(dt);
    你在判断的时候 把 dgv.DataSource as  DATABALE();
    DataTable dtCostName = (dgvFeeType.DataSource as DataTable).Copy();                DataView dv = new DataView(dtCostName);
                    if (dv.Count != dv.ToTable(true, "CostName").Rows.Count)
    好好研究一下