把添加和修改的代码写在catch(exception e ){}里

解决方案 »

  1.   

    不是事件,吧你的添加和修改得代码写在try{}里面,如果有异常代码会自动停止执行转到执行catch(exception e ){}里的代码,其中e就是系统自动捕获的异常,你可以用message.show()显示你自己定义的出错,只要message.show()写在catch(exception e ){}里就可以了
      

  2.   

    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("出错");//这里自定义出错
    }
      

  3.   

    大概我还是没有解释清楚。
    我说的添加删除操作,没有代码。
    我的Winform上有一个DataGrid,已经绑定了数据。
    但当用户添加行的时候(没有代码,只需要把DataGrid的ReadOnly属性变为true),在新行的列中填写数据,如果数据不合法,系统会弹出异常。我是不知道这个异常产生的地方。比如事件之类
      

  4.   

    不是没有代码吧,你是用向导自动生成的吧,你找找类似
    myDataAdapter.update(dst,"test");
    异常应该是在这里产生的
    你用的是什么数据库?
      

  5.   

    呵呵,枫叶,我根本就不是要更新数据库,所以也没有myDataAdapter.update(dst,"test");
    你自己也可以用个DataGrid试试,手动添加行,写数据的时候就是这样。
    前提是绑定的DataSet,有的列不能为空。
      

  6.   

    你是说你只更改DataSet?
    那么异常应该发生在add、remove、delete等方法执行的时候
    这个总应该有吧
      

  7.   

    这是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
      

  8.   

    用trycatchfinally
    多好啊
    语法会吧?
    在catch(Exception err)中,err定义了一个Exception,你只要MessageBox.Show(...)就OK了,如果想像MS的错误提示那样,可以看看系统提示,可以自己读err.Message。在catch中你可以自己定义出错后的显示,还可以自己通过编程来排除错误,上程序继续运行
      

  9.   

    sqlDTS.Tables[curDaTbl.TableName].RowChanging+=new System.Data.DataRowChangeEventHandler(OnDataGrid_RowChanging);改为
    sqlDTS.Tables[tblName].RowChanging+=new System.Data.DataRowChangeEventHandler(OnDataGrid_RowChanging);
      

  10.   

    to: HellMaster(李晋) 
       我也碰到这个问题,我也同样想到用你的方法,可是不行.
       在DataGrid中DataGrid可能有自己的事件对输入其中的数据进行验证,这个事件早于RowChanging,也就是说数据还没提交到DataSet就已经在DataGrid中引发错误了.
       我在DataGrid.Validating事件中可以捕捉错误,可是在我对错误处理后DagaGrid自定义的错误提示还是会显示出来.以前用DataGrid6.0的时候记得是可以自定义错误处理事件的,现在找不到要重写的方法或引发的事件了
      

  11.   

    TheAres(班门斧) 我在代码例子中加了句话:colCodeStrings.AllowDBNull=false;
    然后当我新添加一行,将其中设定列的内容清空,就会先弹出系统提示:
    ***列不能为空!
    然后会弹出自定义的错误提示。即系统异常会在自定义异常只前弹出。所以你没有解决我的问题。
      

  12.   

    to Jacode()
    给我一个DagaGrid会提示错误信息的例子
    我的DataGrid并不提示错误信息
    所以也无从去想了
      

  13.   

    to HellMaster(李晋)
       在数据库里有一个表,其中主键不能为空(废话),主键不是自动增长列.
    在datagrid中绑定这个表.运行时点一下datagrid下面那行datagrid就会自动新建一行,随便输入点数据(不要输入到主键中,保持为空),当焦点移开此列时就会有出错信息.
      

  14.   

    to TheAres(班门斧) 
    你给的例子也可以解决一些情况下的数据验证.但如果我的主键不是自动增长的,而且在数据库中设置了默认值,这样我想实现的是,在录入时不必输入数据,提交到数据库后由dbms自动按我定义的规则生成默认值.这样在录入时就应该是空的,但datagrid却不允许我为空,怎么办
      

  15.   

    try
    {
     ...
    }
    catch(exception e)
    {
        lblError.Text=e.Message;
    }
      

  16.   

    to Jacode()你用错误避免的方法
    就象我刚才说的
    定义一个DataGrid_ColumnChanging的事件在这个事件里面判断不能为空的列是否有值,如果没有的话,给它赋一个默认值,应该就没有问题了
      

  17.   

    HellMaster(李晋)   无论ColumnChanging、RowChanged、RowDeleting还是RowChing都不能捕获系统异常。
    你自己可以试一下,将一个包含不能为空的列 的DataSet绑定到DataGrid。
    当你用DataGrid(用户界面)添加一行时,将不能为空的列清空,焦点离开后,就会弹出异常。
      

  18.   

    to Jacode(),paul23(有时候) 我的已经不会弹出错误信息了解决办法如下:
    设你的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也可以,在里面判断,我就不重复了我的已经没有问题了
    你去试一试,没问题的话就加分吧!!
      

  19.   

    HellMaster(李晋) 
    不用试,一看就知道可以,实际上是个变通的方法,躲开了系统异常。
    但很想知道各位是否有抓住NoNullAllowedException异常,自定义的方法。分数一定给,怕不够,共三个帖子,300分,应该够了。只是帖子挺几天,看看是否还有好的抓住异常的方法。实在没有,再散分
      

  20.   

    你以前用VB?其实捕获是从C++引申的,以前的VB没,多线程也是VB所没的!
    in C++:]
    try
    {
    //代码
    throw //error;
    }
    catch(...)
    {
      //处理
    }
    全部在代码中处理就是用...,具体到每个你要单独处理
    catch(错误异常)