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

shaya5888 2013-09-01 10:59:03
怎么老是感觉.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里面试过,是没有问题的。难道是焦点的问题?

...全文
698 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
shaya5888 2013-09-01
  • 打赏
  • 举报
回复
引用 3 楼 caozhy 的回复:
objRow["ItemID"] = textBox1.Text;
没懂。
threenewbee 2013-09-01
  • 打赏
  • 举报
回复
objRow["ItemID"] = textBox1.Text;
shaya5888 2013-09-01
  • 打赏
  • 举报
回复
引用 1 楼 caozhy 的回复:
objRow["ItemID"] = ""; 这个指定一个数据库中没有的值。
默认为空,在界面上我改为了1,再按添加,应该是没有问题的啊。
threenewbee 2013-09-01
  • 打赏
  • 举报
回复
objRow["ItemID"] = ""; 这个指定一个数据库中没有的值。

111,049

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧