2017-09-21 4 views
1

내 양식 응용 프로그램에 DataGridView이 있습니다. 데이터베이스의 표에서 데이터를 검색하여 DataGridView에 표시 한 후 특정 조건이 충족되면 녹색 색을 일부 셀의 BackColor 행에 적용합니다. 이러한 셀을 녹색으로 채운 후에는 조건을 충족시키지 못하면 전체 행의 색이 BackColor빨강이됩니다.
C# DataGridView BackColor 덮어 쓰기하지 않음

그러나 사전 채색 된 세포는 새로운 색상으로 덮어 쓸 수없는 것처럼 보입니다. 전체 행의 색상을 지정하기 위해 다음 코드를 적용하더라도 빨강은 사전 채색되지 않은 셀에서만 작동합니다.

for(int i=0; i<myDataGridview.Rows.Count; i++){ 
    if(/*a certain condition FAILS*/){ 
     myDataGridView.Rows[i].DefaultCellStyle.BackColor = Color.Red; 
    } 
} 

는 지금, 나는 그 사전 색깔의 세포를 염색하고 빨간색 하나 하나하지만,이 같은 시간과 코드를 많이 취하십시오이 있다면 나는 궁금

for(int i=0; i<myDataGridview.Rows.Count; i++){ 
    if(/*a certain condition FAILS*/){ 
     //Trying to color the whole row RED, but not working 
     myDataGridView.Rows[i].DefaultCellStyle.BackColor = Color.Red; 
     //Manually color the cells, which are pre-colored to green, RED 
     myDataGridView.Rows[i].Cells[6].Style.BackColor = Color.Red; 
     myDataGridView.Rows[i].Cells[7].Style.BackColor = Color.Red; 
     .... 
     myDataGridView.Rows[i].Cells[13].Style.BackColor = Color.Red; 
     myDataGridView.Rows[i].Cells[16].Style.BackColor = Color.Red; 
    } 
} 

을 backColor를 재정의하는 더 좋은 방법. 누군가 도와 주실 수 있습니까?

다음은 예제 (모방) DataGridView입니다.

Green Cells not overridden by Red Row

첫 번째 조건은 자동으로 전체 행이 빨간색 얻을 실패하는 사람들을 , 그 작동합니다. 그러나 첫 번째 조건을 통과하여 "Passed1"셀이 녹색으로 표시되고 두 번째 조건이 실패하면 볼 수 있듯이 그 셀은 녹색으로 유지됩니다. 전체 줄의 색을 빨강으로 지정하고 미리 채색 된 녹색 셀을 빨간색으로 덮어 쓰고 싶습니다.

+0

a) 'precolored'를 설명하십시오! b)의 경우 [여기] (https://stackoverflow.com/questions/46337343/background-color-change-on-a-gridview-when-comparing-to-fields-to-one-another/46340828#46340828)를 참조하십시오. 'CellPainting' 이벤트에서 셀을 채색하는 예제입니다. 전체 조건 세트를 작성하면 충분합니다. – TaW

+0

새 BackColor가 셀에 적용된 경우 (미리 채색 됨) myDataGridView.Rows [i] .DefaultCellStyle을 사용하여 해당 셀을 포함하여 전체 행을 채색하려고해도 해당 셀의 BackColor를 다른 색으로 변경할 수 없습니다. BackColor –

+0

기본 값과 재정의 된 값의 차이점이 있습니다. cell.BackColor를 사용하여 기본값이나 이전 변경을 재정의하십시오! 또한 : CellPainting에서 모든 색칠 등을 집중 해보십시오. – TaW

답변

0

셀을 그릴 때 셀 배경색이 우선 순위를 갖습니다. 색상이 설정 될 때까지 상단에서 시작, 그것은 * 목록을 아래로 계단식합니다

  1. Cell.Style.BackColor
  2. Row.DefaultCellStyle.BackColor
  3. DataGridView.AlternatingRowsDefaultCellStyle.BackColor
  4. DataGridView.RowsDefaultCellStyle.BackColor
  5. Column.DefaultCellStyle.BackColor
  6. DataGridView.DefaultCellStyle.BackColor

*이 목록은 광범위하지 않으며 가능한 모든 BackColor 액세스 가능 속성을 포함하지 않을 수도 있습니다. 당신이 Passed1 열에서 셀에 대한 Cell.Style.BackColor 설정에 가까운 일을하고있는 것 같다


, 다음 코드 로직 당신은 기록했다. 진 두 Passed 열에 대한 조건을 가정

Green Cells not overridden by Red Row

한다 (Yes 또는 No), 당신은이 문제를 해결할 수 있습니다 Green이 높은이 설정되어 Red에 비해 우선 순위가 있기 때문에 당신과 같은 결과가보고있는 준다 결과

private void DataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e) 
{ 
    this.dataGridView1.Columns["Passed1"].DefaultCellStyle.BackColor = Color.Green; 
    this.dataGridView1.Columns["Passed2"].DefaultCellStyle.BackColor = Color.Green; 

    foreach (DataGridViewRow row in this.dataGridView1.Rows) 
    { 
     if (row.Cells["Passed1"].Value.ToString() == "No" || row.Cells["Passed2"].Value.ToString() == "No") 
     { 
      row.DefaultCellStyle.BackColor = Color.Red; 
     } 
    } 
} 

: 다음 Column.DefaultCellStyle.BackColor를 설정하여 Green 배경의 우선 순위를 "감소"

,

Green Cells overridden by Red Rows

+0

감사합니다! 이것은 내가 원하는 대답과 정확히 일치합니다. 나는 우선 순위가 있다는 단서가 없었다. 그게 내 문제를 일으키는 원인 이었어. 당신이 제 질문을 올바르게 이해했기 때문에 기쁩니다. –

+0

모든 공정성에서 나는이 주문 * 목록을 어디에서도 발견하지 못했습니다. 심지어 MSDN 설명서를 검색해도 찾을 수 없습니다. 나는 시행 착오를 통해서만 알 수 있습니다. – OhBeWise

+1

다시 한번 감사 드리고 싶습니다. 나는 새 프로젝트를 진행하고 있는데 이와 비슷한 문제가 있었고이 우선 순위 _로 돌아와 즉시 문제를 해결했습니다. 감사합니다. 감사합니다. –

0

DefaultCellStyle 속성을 사용하여 폼을 표시 할 때까지 모든 셀의 색을 변경할 수 없다는 점에서 datagridview 컨트롤에 문제가 있습니다. 따라서 Shown()이 실행되기 전에 실행되는 메서드 또는 이벤트가 호출 되어도 색상이 변경되지 않습니다. 그게 아마도 문제예요. 페인트 방법을 만들고 Shown() 전에 호출해야 할 수도 있습니다.