2016-09-27 6 views
3

나는 아래와 같은 DataGridView에 있습니다Combobox 값을 기준으로 DataGridView 셀 색을 변경하는 방법?

enter image description here

내가 좋아하는 것 : 양식 부하 Gender 열의 값이 남성 인 경우

  • 때, 열 Name의 해당 색상 셀 것 be 흰색

  • 열의 값을 변경하는 경우 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 이벤트에 가입해야합니다. 새 값이 귀하의 DataGridViewComboBoxCell에서 선택하면 CurrentCellDirtyStateChanged 이벤트에 가입

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; 
     } 
    } 

} 

유효성 검사를 원인 및 핸들러에서이 코드를 시도 : 그런 다음 이벤트 처리기에 다음 코드를 추가

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 대신 바꾸고 있지만 개념은 같습니다. 그것은 다음과 같이 보일 것입니다 이벤트를 처리하기 위해 다음

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

: 당신이 핸들러를 할당해야 트리거가 무엇인지에 따라 다음

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

: 당신은 기본을 적용해야

// 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; 
    } 
} 

허용되는 대답과 달리이 기능은 한 곳에서 정의 된 스타일을 변경해야합니다.

관련 문제