내 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이 함수 호출을 사용하여 행 단위 Datasource
의 DatagridView
.
여기 그 기능이 있습니다. 간단히 복사해서 넣습니다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;
}
}