问了很久,没人答,有关DataTable与DataGrid的问题。

cenxaoi 2005-02-02 02:00:27
DataTable a 含col1列,col1列建了唯一约束。
把a绑定到DataGrid dg;在DataGird不同行填入相同的值,会出现
标题为:向原始数据存储区提交行时出错。
内容为:列"col1"被约束为是唯一的。值"abc"已存在。要更改该值吗?
的MessageBox。
我想把把该MessageBox拦截。修改它的内容,不然用户看不明白。
但是不知在哪里可以拦截,
...全文
329 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
cenxaoi 2005-03-02
  • 打赏
  • 举报
回复
说用try catch 的人大慨没用用Column的中的unique属性吧。

难道使用不能在DataTable或者DataGrid的某个事件中拦截吗,我的思路是这样的,但是找不到有这个功能的事件。
tanc2001 2005-02-23
  • 打赏
  • 举报
回复
还是try
{
}
catch
{
}
容易理解
web_gus 2005-02-23
  • 打赏
  • 举报
回复
up
readersm68 2005-02-17
  • 打赏
  • 举报
回复
修改数据库中系统存储过程中的出错提示,把提示的语句修改成用户可以理解的语句。
xzyan80 2005-02-17
  • 打赏
  • 举报
回复
up
曲滨_銘龘鶽 2005-02-15
  • 打赏
  • 举报
回复
其实 DataGrid 那个弹出窗口 也是 个捕获的异常 提示
只要你在 适当的地方引发异常就可以了

其实 数据绑定到文本框 时如果输入数据类型不对时 也是 DataTable内部引发了个异常
使 文本框 回滚 数据的这些东西和 Delphi 很像的
通过底层系统内置的数据对象 就可以控制 控件的行为,
要不用一种新控件就要重新学很多东西
多郁闷啊
不过还是差点 Delphi 在 数据对象 每个单元格数据 改变的时候都有事件
.net 就行 改变的时候有 事件
曲滨_銘龘鶽 2005-02-15
  • 打赏
  • 举报
回复
这个必须去掉 那个DataTable 主键
给你点代码。

DataTable dt =new DataTable("Test");
dt.Columns.Add("ID",typeof(int));
dt.Columns.Add("Name",typeof(Decimal),"(1+2)*6/(5*8)");

//dt.PrimaryKey = new DataColumn[]{dt.Columns["ID"]};
dt.Rows.Add(new object[]{1});
dataGrid1.DataSource=dt;

//映射 DataTable 行改变事件
dt.RowChanging+=new DataRowChangeEventHandler(dt_RowChanging);


private void dt_RowChanging(object sender, DataRowChangeEventArgs e)
{

if (e.Action == DataRowAction.Add || e.Action == DataRowAction.Change )
{
DataTable dt = e.Row.Table;
string filterExpression = "ID = " +e.Row["ID"];

if (dt!=null && dt.Select(filterExpression).Length > 0)
{
throw new Exception("本列不可以键入重复的数据!\r\n");
}

}
}
曲滨_銘龘鶽 2005-02-15
  • 打赏
  • 举报
回复
不好意识,很久以前写的东西现在都要忘记了。
上面的代码 不正确 忘记 DataRowAction.Add 和 DataRowAction.Change
是不同的了。

private void dt_RowChanging(object sender, DataRowChangeEventArgs e)
{

DataTable dt = e.Row.Table;

string filterExpression = "ID = " +e.Row["ID"];

int selRow = -1;

if (e.Action == DataRowAction.Add )
selRow=0;
else if(e.Action == DataRowAction.Change)
selRow=1;

if (selRow>-1 && dt.Select(filterExpression).Length > selRow)
{
throw new Exception("本列不可以键入重复的数据!\r\n");
}

}
marvelstack 2005-02-14
  • 打赏
  • 举报
回复
取消约束,在数据插入时进行判断,做出相应提示,
http://www.syncfusion.com/FAQ/WinForms/FAQ_c44c.asp
nga96 2005-02-13
  • 打赏
  • 举报
回复
(1)一般情况下,DATAGRID作为显示数据使用,不要作为编辑区
(2)你捕捉 currentcellchanged事件试试看
学习Java中 2005-02-03
  • 打赏
  • 举报
回复
up
噯卟釋手 2005-02-03
  • 打赏
  • 举报
回复
UP~~~~
zhongjy001 2005-02-02
  • 打赏
  • 举报
回复
认为判断,然后throw new Exception("错误!");
web_gus 2005-02-02
  • 打赏
  • 举报
回复
try{你的代码}
catch
{
MessageBox.show(友好信息);
}
manonroad 2005-02-02
  • 打赏
  • 举报
回复
在客户端验证用户如数数据,根据不同的情况给出相应的信息。用约束不是一个好主意。
fellowcheng 2005-02-02
  • 打赏
  • 举报
回复
不如在前端用代码来控制用户的输入
老汉 2005-02-02
  • 打赏
  • 举报
回复
接分快乐。

也不怕版主说你刷屏。
liulxmooo 2005-02-02
  • 打赏
  • 举报
回复
up
sonny72 2005-02-02
  • 打赏
  • 举报
回复
你的做法看似可以,实际把问题复杂化了.
JasonHeung 2005-02-02
  • 打赏
  • 举报
回复
在提交前逐一检查数据的合法性,这是通用的做法!
加载更多回复(4)

110,534

社区成员

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

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

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