2011-09-13 3 views
2

のために実行されているから、イベント:防止、私は次のコードでのDataGridViewを持っているのDataGridView

private void datagridview_CustomerList_CellEndEdit(object sender, DataGridViewCellEventArgs e) 
    { 
     if (!_continueCellEdit) 
     { 
      _continueCellEdit = true; 
      return; 
     } 

     if (datagridview_CustomerList.Rows[e.RowIndex].Cells[e.ColumnIndex].OwningColumn.Name == ColumnNames.NewRateColumn.ToString()) 
     { 
      var row = datagridview_CustomerList.Rows[e.RowIndex]; 
      var font = datagridview_CustomerList.Font; 

      if (modMain.SSS_ToDecimal(row.Cells[ColumnNames.NewRateColumn.ToString()].Value) > 0) 
      { 
       row.DefaultCellStyle.Font = new Font(font, FontStyle.Regular); 
       if (modMain.SSS_ToDecimal(row.Cells[ColumnNames.BudgetBalanceColumn.ToString()].Value) > 0) 
        row.DefaultCellStyle.BackColor = color_BudgetCustomers; 
       else 
        row.DefaultCellStyle.BackColor = color_OriginalColor; 
      } 
      else 
      { 
       row.DefaultCellStyle.BackColor = color_ZeroCharge; 
       row.DefaultCellStyle.Font = new Font(font, FontStyle.Strikeout); 
      } 
     } 

    } 

    private void datagridview_CustomerList_CellMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e) 
    { 
     _continueCellEdit = false; 
     PaintRow(datagridview_CustomerList.Rows[e.RowIndex]); 
    } 

は、私が実行しているからCellEndEditイベントを防ぐために_continueCellEditを使用しています。私は、イベントを有効/無効にするには、これを使用することができます。

datagridview_CustomerList.CellEndEdit += datagridview_CustomerList_CellEndEdit; 

私は上記の行を置く場所を持っていない原因これは役立ちません。私はそれをdatagridview_CustomerList_CellMouseDoubleClickに入れても、このイベントが終了した後も実行されます。私は昼食を取るために取得していないので、私はPROBこれをoverthinkingい

、私は

がこれを扱う代わりに、ブール値を使用してのより良い方法はあり何かのせいにしますが...ダメ?

ありがとうございます!

答えて

1

パターンはchain of responsibilityパターンを使用していますが、あなたのユースケースは保証されているとは思われません。それは第二ハンドラは次に

public GridColorSetter : IChain 
{ 
public IChain NextHandler(get;set;) 
public void ProcessEvent(object sender, DataGridViewCellEventArgs e) 
{ 
     if (datagridview_CustomerList.Rows[e.RowIndex].Cells[e.ColumnIndex].OwningColumn.Name == ColumnNames.NewRateColumn.ToString()) 
     { 
      var row = datagridview_CustomerList.Rows[e.RowIndex]; 
      var font = datagridview_CustomerList.Font; 

      if (modMain.SSS_ToDecimal(row.Cells[ColumnNames.NewRateColumn.ToString()].Value) > 0) 
      { 
       row.DefaultCellStyle.Font = new Font(font, FontStyle.Regular); 
       if (modMain.SSS_ToDecimal(row.Cells[ColumnNames.BudgetBalanceColumn.ToString()].Value) > 0) 
        row.DefaultCellStyle.BackColor = color_BudgetCustomers; 
       else 
        row.DefaultCellStyle.BackColor = color_OriginalColor; 
      } 
      else 
      { 
       row.DefaultCellStyle.BackColor = color_ZeroCharge; 
       row.DefaultCellStyle.Font = new Font(font, FontStyle.Strikeout); 
      } 
     } 

    if (this.NextHandler!= null) 
     this.NextHandler.ProcessEvent; 

} 
} 
} 

ようになり、チェーン内の最初のハンドラは、基本的に

public DoubliClickHanlder : IChain 
{ 
    public IChain NextHandler(get;set;) 

public void ProcessEvent(object sender, DataGridViewCellEventArgs e) 
    { 
     if !(this.continueCellEdit && this.NextHandler!= null) 
      NextHandler.ProcessEvent(sender,e) 
    } 

} 

と次のようになり、この

のようなものを実装する可能性があるという

それ次のように書くことができます

DoubleClickHandler dch = new DoubleClickHandler() {NextHandler= new GridColorSetter()} 
this.datagridview_CustomerList.CellEndEdit += dch.ProcessEvent; 
+0

lolはい私はブール値に固執すると思います。別のアイデアをありがとう。それは私にいくつかの他の問題についていくつかのアイデアを与えてくれます。 – ErocM

関連する問題