2016-09-27 18 views
3

私は以下のようにDataGridViewのを持っている:は、どのようにコンボボックスの値に基づいて、DataGridViewのセルの色を変更するには?

enter image description here

私が希望:

  • フォームの負荷、Gender列の値は、男性、コラムName意志の対応する色のセルである場合男性→女性、の色のセル:列Genderの値を変更した場合ときホワイト

  • ことコラムNameはDarkGray、 なりそうであれば、変更した列の値Gender:女性→男性、コラムNameのカラーセルが、私はそれを試してみましたが、私はそれを行うことはできませんよ

ホワイトになります。

private void dataGridView_CurrentCellDirtyStateChanged(object sender, EventArgs e) 
    { 
     DataGridView dgv = sender as DataGridView; 
     DataGridViewCell cell = dgv.CurrentCell; 

     if (dgv.Rows[cell.RowIndex].Cells["Gender"].Value.ToString().Trim() == "Male") 
     { 
      // Male 
      dgv.Rows[cell.RowIndex].DefaultCellStyle.BackColor = Color.White; 
     } 
     else 
     { 
      // Female 
      dgv.Rows[cell.RowIndex].DefaultCellStyle.BackColor = Color.DarkGray; 
     } 
    } 

OR:

private void dataGridView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) 
    { 
     DataGridView dgv = sender as DataGridView; 

     if (dgv.Columns[e.ColumnIndex].Name.Equals("Gender")) 
     { 
      if (e.Value != null && e.Value.ToString().Trim() == "Male") 
      { 
       e.CellStyle.BackColor = Color.White; 
      } 
      else 
      { 
       e.CellStyle.BackColor = Color.DarkGray; 
      } 
     } 

     //if (dgv.Rows[e.RowIndex].Cells["Gender"].Value.ToString().Trim() == "Male") 
     //{ 
     // e.CellStyle.BackColor = Color.White; 
     //} 
     //else 
     //{ 
     // e.CellStyle.BackColor = Color.DarkGray; 
     //} 
    } 

これらの任意のヒントが大きな助けになります。前もって感謝します。

+0

[CellFormattingイベント](https://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.cellformatting(v = vs.110).aspx)を参照してください。この例あなたが望むことをするのを助けるかもしれない – Pikoh

+0

[This(http://stackoverflow.com/questions/39540935/for-a-windows-forms-application-using-datagridview-how-can-i-check-a-value -in/39541363#39541363)が役立つ可能性があります。 – Berkay

+0

返信いただきありがとうございます。私はどのようにして、データを表示するには、 'DataGridViewRow'を使用し' DataTable'を使用していませんか?申し訳ありませんが、私は、C# – MinhKiyo

答えて

3

あなたはCellFormattingイベントに登録する必要があります背景色を変更します。

private void dataGridView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) 
{ 
    DataGridView dgv = sender as DataGridView; 

    if (dgv.Columns[e.ColumnIndex].Name.Equals("Gender")) 
    { 
     if (e.Value != null && e.Value.ToString().Trim() == "Male") 
     { 
      dgv.Rows[e.RowIndex].Cells["name"].Style.BackColor = Color.White; 
     } 
     else 
     { 
      dgv.Rows[e.RowIndex].Cells["name"].Style.BackColor = Color.DarkGray; 
     } 
    } 

} 

、新しい値があなたのDataGridViewComboBoxCellに選択された検証を起こすCurrentCellDirtyStateChangedイベントをサブスクライブし、そのハンドラにこのコードを試して:

private void dataGridView_CurrentCellDirtyStateChanged(object sender, EventArgs e) 
{ 
    DataGridView dgv = sender as DataGridView; 
    DataGridViewCell cell = dgv.CurrentCell; 
    if (cell is DataGridViewComboBoxCell) 
    { 
     dgv.CommitEdit(DataGridViewDataErrorContexts.Commit); 
     dgv.EndEdit(); 
    } 
} 
+0

はい、まさに私が走りたいと思っていました。あなたの努力に感謝! – MinhKiyo

0

そして、イベントハンドラにこのコードを追加実際の例を示すために、私はForeColorをBackの代わりに変更していますが、コンセプトは同じです。あなたはデフォルトを適用する必要があります。

this.dgvUsers.DefaultCellStyle.ForeColor = Color.Black; 

次に、あなたのトリガーが何であるかに基づいて、あなたはハンドラを割り当てる必要があります:

dgvUsers.CellFormatting += new System.Windows.Forms.DataGridViewCellFormattingEventHandler(this.dgvUsers_CellFormatting); 
this.Controls.Add(dgvUsers); 

その後、イベントを処理するために、それは次のようになります。

// Handle user going inactive or being reactivated 
private void dgvUsers_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) 
{ 
    DataRowView row = dgvUsers.Rows[e.RowIndex].DataBoundItem as DataRowView; 
    if (row != null && row.Row.ItemArray[7].Equals("N")) 
    { 
     e.CellStyle.ForeColor = Color.Gray; 
    } 
    else 
    { 
     e.CellStyle.ForeColor = Color.Black; 
    } 
} 

受け入れられた回答とは異なり、これは1つの場所で定義されたスタイルを変更する必要があります。

関連する問題