当前位置:编程学习 > C#/ASP.NET >>

System.Data.ConstraintException: 列“XXX”被约束为是唯一的。值“XXX”已存在。

怎么老是感觉.net的DataGridView很难用的。今天又碰到一个问题如下:

界面上就一个ToolStrip,一个DataGridView绑定了个DataTable。
点击ToolStrip上的“添加”,就在DataTable里面添加一行,DataTable有主键。
当第二次添加的时候Crash:


我猜可能是ToolStrip点击的时候Grid没有EndEdit,但是我加上之后还是不行。
Debug看过,第二次添加的时候,第一次修改的值已经提交到Table里面了,找了很久都没找出原因。
请大家帮我看看。

  private void FrmGridAddRow_Load(object sender, EventArgs e)
        {

            this._objTable = new DataTable();

            this._objTable.Columns.Add("ItemID");
            this._objTable.Columns.Add("ItemName");
            this._objTable.Columns.Add("ItemType");
            this._objTable.Columns.Add("Price");

            this._objTable.PrimaryKey = new DataColumn[] { this._objTable.Columns["ItemID"] };

            dataGridView1.DataSource = _objTable;
        }

        private void toolStripButton1_Click(object sender, EventArgs e)
        {
            this.dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);
            this.dataGridView1.EndEdit();

            DataRow objRow = null;

            // 加上注释的代码后,能达到效果,但是不想这么麻烦。
            //if (this.dataGridView1.CurrentRow != null)
            //{
            //    objRow = ((DataRowView)this.dataGridView1.CurrentRow.DataBoundItem).Row;
            //    DataRowState objRowState = objRow.RowState;
            //    objRow.AcceptChanges();
            //    switch (objRowState)
            //    {
            //        case DataRowState.Added :
            //            objRow.SetAdded();
            //            break;
            //        case DataRowState.Modified :
            //            objRow.SetModified();
            //            break;
            //    }
            //}

            objRow = this._objTable.NewRow();
            objRow["ItemID"] = "";
            objRow["ItemName"] = "";
            objRow["ItemType"] = "";
            objRow["Price"] = "";
            this._objTable.Rows.Add(objRow);

            this.dataGridView1.CurrentCell = this.dataGridView1[0, this.dataGridView1.Rows.Count - 1];
        }



PS:我把添加行的代码放在Button的Click里面试过,是没有问题的。难道是焦点的问题?

datagridview --------------------编程问答-------------------- objRow["ItemID"] = "";
这个指定一个数据库中没有的值。 --------------------编程问答--------------------
引用 1 楼 caozhy 的回复:
objRow["ItemID"] = "";
这个指定一个数据库中没有的值。


默认为空,在界面上我改为了1,再按添加,应该是没有问题的啊。 --------------------编程问答-------------------- objRow["ItemID"] = textBox1.Text; --------------------编程问答--------------------
引用 3 楼 caozhy 的回复:
objRow["ItemID"] = textBox1.Text;


没懂。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,