(DataGridView + 바인딩) 객체에 따라 라인을 채색하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/284420

문제

객체의 특성에 따라 특정 선에 대한 백색을 추가하고 싶습니다.

내가 가지고있는 솔루션 (그리고 작동)은 이벤트를 사용하는 것입니다. DataBindingComplete 그러나 나는 그것이 최선의 해결책이라고 생각하지 않습니다.

이벤트는 다음과 같습니다.

    private void myGrid_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
    {

        for (int i = 0; i < this.myGrid.Rows.Count; i++)
        {
            if((this.myGrid.Rows[i].DataBoundItem as MyObject).Special)
            {
                this.myGrid.Rows[i].DefaultCellStyle.BackColor = Color.FromArgb(240, 128, 128);
            }
        }
    }

더 나은 다른 옵션이 있습니까?

도움이 되었습니까?

해결책

이벤트 핸들러를 RowPostPaint에 첨부 할 수도 있습니다.

dataGridView1.RowPostPaint += OnRowPostPaint;

void OnRowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
{
    MyObject value = (MyObject) dataGridView1.Rows[e.RowIndex].DataBoundItem;
    DataGridViewCellStyle style = dataGridView1.Rows[e.RowIndex].DefaultCellStyle;

    // Do whatever you want with style and value
    ....
}

다른 팁

나는 실제로 Winforms와 함께 작동하지 않지만 ASP에서는 'ItemDatabound'방법을 사용합니다. DataGrid의 Windows 양식에 비슷한 것이 있습니까?

그렇다면이 방법에서 이벤트 인수에는 DataGrid 행과 함께 데이터가있는 항목이 포함됩니다. 따라서 일반 코드는 다음과 같이 보일 것입니다 (구문은 아마도 꺼져있을 것입니다).

if(((MyObject)e.Item.DataItem).Special)
   e.Item.DefaultCellStyle.BackColor = Color.FromArgb(240, 128, 128);

몇 가지를 제안합니다.

  • _onrowdatabound에서 행을 수정하는 것을보십시오
  • 코드에서 색상을 설정하지 마십시오 !!! 이것은 큰 실수 일 것입니다. 속성 속성을 사용하고 CSSCLASS를 설정하십시오. 여전히 사람들에게 손가락의 흔들림.

구현에 어려움을 겪고 있는지 알려 주시면 스 니펫을 게시하겠습니다.

private void myGrid_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{

    foreach (DataGridViewRow row in myGrid.Rows)
    {
        if((row.DataBoundItem as MyObject).Special)
        {
            row.DefaultCellStyle.BackColor = Color.FromArgb(240, 128, 128);
        }
    }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top