2012-02-03 53 views
2

がSilverlight 4で列全体の編集を無効にしないで、のデータグリッド内の特定のセルの編集を無効にすることが可能かどうかを知る必要があります。特定のセルオブジェクトをFrameworkElementプロパティIsReadOnlyまたはIsEnabledが含まれていません。 あなたはたぶん質問します:なぜ私はそれを必要としますか?私のアプリケーションでは、特定のセルを他のセルの内容に応じて無効にする必要があります。各行はこのように個別にチェックされています。 あなたは、私は、このような異常な動作を実現することができる方法のアイデアを持っている場合は記入してください;)DataGridで特定のセルの編集を無効にする

答えて

1

あなたは、行、あなたは無効にしているしたいセル/セルの列インデックスがある場合:次に

int r = 2, c = 4; 

をあなたは、イベントCellEnterとCellLeaveに耳を傾け、次の操作を実行できます。

private void dataGridView1_CellEnter(object sender, DataGridViewCellEventArgs e) 
    { 
     if (e.RowIndex == r) 
     { 
      if (e.ColumnIndex == c) 
      { 
       dataGridView1.Columns[e.ColumnIndex].ReadOnly = true; 
      } 
     } 
    } 

    private void dataGridView1_CellLeave(object sender, DataGridViewCellEventArgs e) 
    { 
     if (e.RowIndex == r) 
     { 
      if (e.ColumnIndex == c) 
      { 
       dataGridView1.Columns[e.ColumnIndex].ReadOnly = false; 
      } 
     } 
    } 

あなたはまだ読み取り専用に列全体を設定しているが、あなたはセルを離れた後、あなたはそれをバックにリセットされるので、それが表示されるという効果があります細胞のために働くだけです。

+1

少し違ったアプローチを使用しました。私はDataGridのCurrentCellChangedイベントとCellEditEndedイベントに接続しました。しかし、そのアイデアは本当に役に立ちました。ありがとうございました! – neurotix

+0

これを実装した方法を教えてください。ありがとう。 – tobewan

+0

あなたは**ブール論理**が何であるかわからないですか? – Arnthor

0

おかげNominSimが、これは私があまりにも私のproplemをお解決するために私を助けますが、NominSimが言ったようにneurotix シルバー4.

に私のDataGridにCellEnterとCellLeave方法を見つけるdidntのように、あなたが行のインデックスを知っている必要がありますと列。私はそれを解決する方法

を無効に編集

System.Windows.Threading.DispatcherTimer timMakeEditable = new System.Windows.Threading.DispatcherTimer(); 

    private void dataGrid1_PreparingCellForEdit(object sender, DataGridPreparingCellForEditEventArgs e) 
{ 
    timMakeEditable.Interval = new TimeSpan(0, 0, 0, 0, 100); // 100 Milliseconds 
    timMakeEditable.Tick += new EventHandler(timer_Tick); 
    timMakeEditable.Start(); 

    if (e.RowIndex == r && e.ColumnIndex == c) 
    { 
      dataGrid1.Columns[yourColumnIndex].IsReadOnly = true;  
    } 
} 

数ミリ秒後に編集

を有効にタイマーはカラムが有効になってます

void timer_Tick(object sender, EventArgs e) 
    { 
     dataGrid1.Columns[yourColumnIndex].IsReadOnly = false; 
     timMakeEditable.Stop(); 

    } 

私はcellEditEndedを使うのが良いアイデアだと思っていますが、それは私のためには機能しませんでした。

0

あなたは、私はこの本は、特定のセルを無効にするための最高のアイデアである。この

<DataGridTextColumn Header="ID" 
             Binding="{Binding ID}" 
             IsReadOnly="True"/> 

のような特定のセルにIsReadOnly属性を使用することができます。 ありがとう

関連する問題