我想写datarow几个事件,包括
beforenew()
afternew()
beforeedit()
afteredit()
beforedelete()
afterdelete()
想写在基类里,但是不知道怎么写,哪位给点思路给我,有代码就更好了

解决方案 »

  1.   

    cSI.dt.RowDeleted += new DataRowChangeEventHandler( Row_Deleted ); private void Row_Deleted( object sender, DataRowChangeEventArgs e )
    {
    txt_amount.Text=Cs.Amount(cSI.dt,"总价").ToString();  
    }
      

  2.   

    to;cansum396(沉觉不醒) ( ) 
    谢谢,高人回答,我想问下
    1。在操作这些事件的时候是不是也在基类里写这些事件,或者其他的
    2。
    在datatable 类里我看见了 
    RowChanged 在成功更改 DataRow 之后发生。 
    RowChanging 在 DataRow 正在更改时发生。 
    RowDeleted 在表中的行已被删除后发生。 
    RowDeleting 在表中的行要被删除之前发生。 
    但是beforenew()
         afternew()
    如何添加 ,ms datatable类里面没有这几个事件的
      

  3.   

    to:Knight94(愚翁) ( ) 
    呵呵 ,你好 又见面了。
    其实就是在操作datarow是做下校验用的,就是在提交dataset之前校验
     比如     myTable.Rows.Add(myRow);我在Add之前我先对一些数据进行校验
    所以希望写在基类里
      

  4.   

    不建议做在DataRow中,正确的地方应该控制输入端,
    例如:如果绑定的是datagrid,那么应该控制datagrid中的输入来符合没个字段的标准。
      

  5.   

    1。问下 :
    可不可以DataRow中实现 :) 麻烦给点解决方案2。除了校验数据,其实我还要做一些辅助性数据修改 例如我修改某基础资料 比如单位代码
    我在业务单据里使用了这个单位代码 我就要在把基础资料里的记录的状态改为已使用。
      

  6.   

    午饭时间 ,hehe 大家吃饭。。
      

  7.   

    to 1。问下 :
    可不可以DataRow中实现 :) 麻烦给点解决方案要做也不是在DataRow中去做,而是在DataTable中去做
    一个DataRow脱离了DataTable就没什么意义了。
      

  8.   

    我这里有段这样的代码 
    public DataBase.EditStatus Status
    {
    get
    {
    if(null == _data || 0 == _data.Tables.Count || 0 == _data.Tables[mainTable].Rows.Count)
    return EditStatus.esEmpty;
    if(autoStatus)
    {
    DataRow dr = _data.Tables[mainTable].Rows[0];
    if(DataRowState.Unchanged == dr.RowState)
    return EditStatus.esNoChange;
    if(DataRowState.Added == dr.RowState)
    return EditStatus.esNew;
    if(DataRowState.Deleted == dr.RowState)
    return EditStatus.esDelete;
    if(DataRowState.Modified == dr.RowState)
    return EditStatus.esEdit;
    return EditStatus.esEmpty;
    }
    else
    {
    return editStatus;
    }
    }
    }[System.EnterpriseServices.AutoComplete]
    protected internal virtual void UpdateToDB(DataBase dataObject)
    {
    _data = dataObject._data.Copy();
    bool isDelete = false;
    if(_data.Tables[dataObject.mainTable].Rows.Count > 0)
    if(DataRowState.Deleted == _data.Tables[dataObject.mainTable].Rows[0].RowState)
    _data.RejectChanges();
    if(DataBase.EditStatus.esNew == dataObject.Status)
    BeforeNew(dataObject);
    if(DataBase.EditStatus.esEdit == dataObject.Status && !dataObject._inteUse)
    BeforeEdit(dataObject);
    if(DataBase.EditStatus.esDelete == dataObject.Status)
    {
    isDelete = true;
    BeforeDelete(dataObject);
    }
    try
    {
    string[] sqls = _sql.Split(';');
    int i = 0;
    foreach(DataTable dt in  dataObject._data.Tables)
    {
    dba.UpdateTableToDB(dt, sqls[i]);
    i++;
    }
    }
    catch(SqlException e)
    {
    string msg = "";
    for(int i = 0; i < e.Errors.Count; i++)
    {
    switch(e.Errors[i].Number)
    {
    case 2627: msg+="代码已存在\n";
    break;
    case 3621:  break;
    default: msg += e.Errors[i].Number.ToString() + ":" + e.Errors[i].Message.TrimEnd() + "\n";
    break;
    }
    }
    throw new Fa_Util.CustomerException(msg, e);
    }if(DataBase.EditStatus.esNew == dataObject.Status)
    AfterNew(dataObject);
    if(DataBase.EditStatus.esEdit == dataObject.Status && !dataObject._inteUse)
    AfterEdit(dataObject);
    if(isDelete)
    AfterDelete(dataObject);
    }我不太看的懂,比较菜 呵呵 Knight94能不能讲解下里面 具体的含义 我要有个思路
      

  9.   

    没有什么复杂的,第一部分是一个属性
    根据当前MainTable中的第一个记录来进行当前状态进行返回。第二部分是根据状态以及相应的sql语句来操作各个DataTable。
      

  10.   

    to()Knight94(愚翁) 恩 这个问题我慢慢看把
    再请教下 把程序做成服务后使用 ,但是我这个服务要依赖于sqlserver服务
    能告诉我要用什么类可以实现.(C#程序)
      

  11.   

    你创建服务类型项目,增加ServiceInstaller的时候,设置其的ServicesDependedOn 属性。
      

  12.   

    呵呵,多谢 Knight94(愚翁)  以后请多多指教。