在一个winform中我从数库中调出一表放于dataSet ds 中,并把ds.tables[0]增加一计算列,其值表达式为原有的列A * 列B 的积,把dataSet.tables[0]绑定到dataGrid后,当实时改变列A的值时,必须把焦点移离当前被编辑行后,计算列的改变才会发生,有没有什么办法让焦点到当前行另外一列就显示改变?
并且当改变A列值后,如果不移开焦点到其它行(不是其它列,当焦点移到当前行其它列时,计算列的改变仍无法显示。),ds.hasChanges()无法检测到变化。为什么呢?请问解决方法。谢谢。

解决方案 »

  1.   

    你是DataSet改变还是DataGrid在改变?
      

  2.   

    你是DataSet改变还是DataGrid在改变?
      

  3.   

    改变DataGrid,此时焦点须移到其它行才能显示改变。
      

  4.   

    protected void dataGrid1_MouseDown(object sender, MouseEventArgs e){ 
       // Use the HitTest method to get a HitTestInfo object. 
       System.Windows.Forms.DataGrid.HitTestInfo hi;    
       DataGrid grid = (DataGrid) sender; 
       hi=grid.HitTest(e.X, e.Y); 
       // Test if the clicked area was a cell. 
       if(hi.Type==DataGrid.HitTestType.Cell ) { 
           CurrencyManager gridCurrencyManager = 
            (CurrencyManager)this.BindingContext
            [dataGrid1.DataSource, dataGrid1.DataMember];
            gridCurrencyManager.EndCurrentEdit();     
                
       } 
    }http://community.csdn.net/Expert/topic/4281/4281140.xml?temp=.3892176
      

  5.   

    不能让用户修改完后再点击一下datagrid呀。
    直接用这两句:      
             CurrencyManager gridCurrencyManager = 
            (CurrencyManager)this.BindingContext
            [dataGrid1.DataSource, dataGrid1.DataMember];
            gridCurrencyManager.EndCurrentEdit(); 
    也不行呀。在修改数据的时候ds.hasChangers()检测不到此变化
      

  6.   

    当只修改一行的数据时,不移开焦点,hasChanges检测不到变化
      

  7.   

    应该已经结束当前编辑了,问题还是焦点不移开行,DATAGRID识别不到变化.
      

  8.   

    首先给你的datatable增加一个事件,类似于:
    this.iMoveDS.CntrMovement.ColumnChanging+=new DataColumnChangeEventHandler(CntrMovement_ColumnChanging);
    iMoveDS是我的DataSet,CntrMovement是我的DataTable。
    然后写CntrMovement_ColumnChanging事件:
    if (离开的那一列的列名==e.Column.ColumnName)
    {
    计算();
    }