[C#] datagridview에서 행 색상을 변경하는 방법은 무엇입니까?

내 datagridview에서 특정 행의 색상을 변경하고 싶습니다. columncell 7의 값이 columncell 10의 값보다 작 으면 행이 빨간색으로 변경되어야합니다.이를 수행하는 방법에 대한 제안 사항이 있습니까?



답변

datagridview에서 행을 반복 한 다음 각 행에서 열 7과 10의 값을 비교해야합니다.

이 시도:

foreach (DataGridViewRow row in vendorsDataGridView.Rows)
     if (Convert.ToInt32(row.Cells[7].Value) < Convert.ToInt32(row.Cells[10].Value))
     {
         row.DefaultCellStyle.BackColor = Color.Red;
     }


답변

방금이 문제를 조사하고 있었으므로 (이 질문은 거의 3 년 전에 출판되었지만 누군가 도움이 될 것입니다 …)하지만 더 나은 옵션은 RowPrePaint이벤트 내부에 코드를 배치하여 모든 행을 통과해야하며 페인트 된 행만 통과해야하므로 많은 양의 데이터에서 훨씬 잘 수행됩니다.

이벤트에 첨부

this.dataGridView1.RowPrePaint
    += new System.Windows.Forms.DataGridViewRowPrePaintEventHandler(
        this.dataGridView1_RowPrePaint);

이벤트 코드

private void dataGridView1_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e)
{
    if (Convert.ToInt32(dataGridView1.Rows[e.RowIndex].Cells[7].Text) < Convert.ToInt32(dataGridView1.Rows[e.RowIndex].Cells[10].Text))
    {
        dataGridView1.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.Beige;
    }
}


답변

당신은 CellFormatting이벤트를 찾고 있습니다.
다음 은 예입니다.


답변

텍스트 색상도 변경하는 데 문제가있었습니다. 색상이 변경된 것을 본 적이 없습니다.

내가 코드를 추가 할 때까지 이벤트에 텍스트 색상을 변경하기 DataBindingsComplete위해 DataGridView. 그 후 그것은 효과가있었습니다.

나는 이것이 같은 문제에 직면하는 사람들을 도울 수 있기를 바랍니다.


답변

셀의 값이 정수라고 가정하면 다음과 같은 것이 있습니다.

foreach (DataGridViewRow dgvr in myDGV.Rows)
{
  if (dgvr.Cells[7].Value < dgvr.Cells[10].Value)
  {
    dgvr.DefaultCellStyle.ForeColor = Color.Red;
  }
}

테스트되지 않았으므로 오류에 대해 사과드립니다.

특정 행을 알고 있으면 반복을 건너 뛸 수 있습니다.

if (myDGV.Rows[theRowIndex].Cells[7].Value < myDGV.Rows[theRowIndex].Cells[10].Value)
{
  dgvr.DefaultCellStyle.ForeColor = Color.Red;
}


답변

어떤 사람들은 Paint, CellPainting또는 CellFormatting이벤트 를 사용하기를 원 하지만 이러한 이벤트에서 스타일을 변경하면 재귀 호출이 발생합니다. 사용 DataBindingComplete하면 한 번만 실행됩니다. 에 대한 논거 CellFormatting는 보이는 셀에서만 호출되므로 보이지 않는 셀을 포맷 할 필요는 없지만 여러 번 포맷하는 것입니다.


답변

당신은 변경 할 수 있습니다 Backcolor적용 후 condition.and이 함수 호출을 사용하여 행 단위 DatasourceDatagridView.

여기 그 기능이 있습니다. 간단히 복사해서 넣습니다Databind

private void ChangeRowColor()
{
    for (int i = 0; i < gvItem.Rows.Count; i++)
    {
        if (BindList[i].MainID == 0 && !BindList[i].SchemeID.HasValue)
            gvItem.Rows[i].DefaultCellStyle.BackColor = ColorTranslator.FromHtml("#C9CADD");
        else if (BindList[i].MainID > 0 && !BindList[i].SchemeID.HasValue)
            gvItem.Rows[i].DefaultCellStyle.BackColor = ColorTranslator.FromHtml("#DDC9C9");
        else if (BindList[i].MainID > 0)
            gvItem.Rows[i].DefaultCellStyle.BackColor = ColorTranslator.FromHtml("#D5E8D7");
        else
            gvItem.Rows[i].DefaultCellStyle.BackColor = Color.White;
    }
}