不是事件,吧你的添加和修改得代码写在try{}里面,如果有异常代码会自动停止执行转到执行catch(exception e ){}里的代码,其中e就是系统自动捕获的异常,你可以用message.show()显示你自己定义的出错,只要message.show()写在catch(exception e ){}里就可以了
try { string sConn="server=localhost;uid=sa;pwd=;database=test"; string sCommand="SELECT * FROM test"; int sex=0; SqlConnection myConn = new SqlConnection(sConn); qlDataAdapter myDataAdapter = new SqlDataAdapter(); myDataAdapter.SelectCommand = new SqlCommand(sCommand, myConn); SqlCommandBuilder custCB = new SqlCommandBuilder(myDataAdapter); yConn.Open(); DataSet dst= new DataSet(); myDataAdapter.Fill(dst,"test"); ..........myDataAdapter.update(dst,"test"); } catch(Exception ex) { myConn.Close(); MessageBox.Show("出错");//这里自定义出错 }
这是Win Form的.5.17 How can I do cell by cell validation in a datagrid? http://www.syncfusion.com/FAQ/WinForms/FAQ_c44c.asp#q773q这使演示代码: http://www.syncfusion.com/faq/winforms/Files/datagridvalidation.zip
to: HellMaster(李晋) 我也碰到这个问题,我也同样想到用你的方法,可是不行. 在DataGrid中DataGrid可能有自己的事件对输入其中的数据进行验证,这个事件早于RowChanging,也就是说数据还没提交到DataSet就已经在DataGrid中引发错误了. 我在DataGrid.Validating事件中可以捕捉错误,可是在我对错误处理后DagaGrid自定义的错误提示还是会显示出来.以前用DataGrid6.0的时候记得是可以自定义错误处理事件的,现在找不到要重写的方法或引发的事件了
{
string sConn="server=localhost;uid=sa;pwd=;database=test";
string sCommand="SELECT * FROM test";
int sex=0;
SqlConnection myConn = new SqlConnection(sConn);
qlDataAdapter myDataAdapter = new SqlDataAdapter();
myDataAdapter.SelectCommand = new SqlCommand(sCommand, myConn);
SqlCommandBuilder custCB = new SqlCommandBuilder(myDataAdapter);
yConn.Open();
DataSet dst= new DataSet();
myDataAdapter.Fill(dst,"test");
..........myDataAdapter.update(dst,"test");
}
catch(Exception ex)
{
myConn.Close();
MessageBox.Show("出错");//这里自定义出错
}
我说的添加删除操作,没有代码。
我的Winform上有一个DataGrid,已经绑定了数据。
但当用户添加行的时候(没有代码,只需要把DataGrid的ReadOnly属性变为true),在新行的列中填写数据,如果数据不合法,系统会弹出异常。我是不知道这个异常产生的地方。比如事件之类
myDataAdapter.update(dst,"test");
异常应该是在这里产生的
你用的是什么数据库?
你自己也可以用个DataGrid试试,手动添加行,写数据的时候就是这样。
前提是绑定的DataSet,有的列不能为空。
那么异常应该发生在add、remove、delete等方法执行的时候
这个总应该有吧
http://www.syncfusion.com/FAQ/WinForms/FAQ_c44c.asp#q773q这使演示代码:
http://www.syncfusion.com/faq/winforms/Files/datagridvalidation.zip
多好啊
语法会吧?
在catch(Exception err)中,err定义了一个Exception,你只要MessageBox.Show(...)就OK了,如果想像MS的错误提示那样,可以看看系统提示,可以自己读err.Message。在catch中你可以自己定义出错后的显示,还可以自己通过编程来排除错误,上程序继续运行
sqlDTS.Tables[tblName].RowChanging+=new System.Data.DataRowChangeEventHandler(OnDataGrid_RowChanging);
我也碰到这个问题,我也同样想到用你的方法,可是不行.
在DataGrid中DataGrid可能有自己的事件对输入其中的数据进行验证,这个事件早于RowChanging,也就是说数据还没提交到DataSet就已经在DataGrid中引发错误了.
我在DataGrid.Validating事件中可以捕捉错误,可是在我对错误处理后DagaGrid自定义的错误提示还是会显示出来.以前用DataGrid6.0的时候记得是可以自定义错误处理事件的,现在找不到要重写的方法或引发的事件了
然后当我新添加一行,将其中设定列的内容清空,就会先弹出系统提示:
***列不能为空!
然后会弹出自定义的错误提示。即系统异常会在自定义异常只前弹出。所以你没有解决我的问题。
给我一个DagaGrid会提示错误信息的例子
我的DataGrid并不提示错误信息
所以也无从去想了
在数据库里有一个表,其中主键不能为空(废话),主键不是自动增长列.
在datagrid中绑定这个表.运行时点一下datagrid下面那行datagrid就会自动新建一行,随便输入点数据(不要输入到主键中,保持为空),当焦点移开此列时就会有出错信息.
你给的例子也可以解决一些情况下的数据验证.但如果我的主键不是自动增长的,而且在数据库中设置了默认值,这样我想实现的是,在录入时不必输入数据,提交到数据库后由dbms自动按我定义的规则生成默认值.这样在录入时就应该是空的,但datagrid却不允许我为空,怎么办
{
...
}
catch(exception e)
{
lblError.Text=e.Message;
}
就象我刚才说的
定义一个DataGrid_ColumnChanging的事件在这个事件里面判断不能为空的列是否有值,如果没有的话,给它赋一个默认值,应该就没有问题了
你自己可以试一下,将一个包含不能为空的列 的DataSet绑定到DataGrid。
当你用DataGrid(用户界面)添加一行时,将不能为空的列清空,焦点离开后,就会弹出异常。
设你的DataSet为DataSet1,DataGrid为DataGrid1,你绑到DataGrid的表名为myTable,在DataGrid1的CurrentCellChanged事件里面添加以下的代码://如果dataGrid1.CurrentRowIndex不小于myTable的记录数的话,表示DataGrid中正在添加记录
if (dataGrid1.CurrentRowIndex>=this.BindingContext[DataSet1,"myTable"].Count)
{
//myTable也对应的添加一条记录
DataTable dtTbl=new DataTable();
dtTbl=DataSet1.Tables["myTable"];
DataRow row;
row = dtTbl.NewRow();//给所有不能为空的字段设置一个默认值
row[0] = "值1";
row[1] = "值2";
//设置默认值结束
dtTbl.Rows.Add(row);
}然后。
就OK了如果你在修改记录的时候还有问题的话,就用我昨天说的办法定义一个ColumnChanging的事件或在TableStyles里定义每一个不能为空的字段的TextChanged也可以,在里面判断,我就不重复了我的已经没有问题了
你去试一试,没问题的话就加分吧!!
不用试,一看就知道可以,实际上是个变通的方法,躲开了系统异常。
但很想知道各位是否有抓住NoNullAllowedException异常,自定义的方法。分数一定给,怕不够,共三个帖子,300分,应该够了。只是帖子挺几天,看看是否还有好的抓住异常的方法。实在没有,再散分
in C++:]
try
{
//代码
throw //error;
}
catch(...)
{
//处理
}
全部在代码中处理就是用...,具体到每个你要单独处理
catch(错误异常)