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,再按添加,应该是没有问题的啊。 --------------------编程问答-------------------- objRow["ItemID"] = textBox1.Text; --------------------编程问答--------------------
没懂。
补充:.NET技术 , C#