2008-10-10 1 views
2

У меня есть DataGridView, который показывает содержимое DataTable.Как изменить обратную линию строки в DataGridView на основе значения ячейки?

Я хочу установить обратную цветную строку в зависимости от значения ячейки в этой строке.

Обратите внимание, что указанная ячейка находится в столбце, который не отображается в DataGridView (Visible = False).

ответ

1

Если вы обрабатываете событие RowDataBound, вы можете проверить значение данных и изменить атрибуты ячейки или применить в этом обработчике другой стиль.

protected void Page_Load(object sender, EventArgs e) 
{ 
    GridView g1 = new GridView(); 
    g1.RowDataBound += new GridViewRowEventHandler(g1_RowDataBound); 
} 

void g1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if(e.Row.RowType == DataControlRowType.DataRow) 
    { 
     // Check the Value 
     if(e.Row.Cells[1].Text = someValue) 
     { 
      e.Row.Cells[1].CssClass = "colorCellRed"; 
     } 

    } 
} 

Это должно дать вам то, что вы ищете. Дайте мне знать, если вам это нужно в VB, а не в C#.

Удачи!

1

RowDataBound, как уже упоминалось; Вы также можете проверить значения ваших данных объектов, а также текст в самой сетке:

 
void gridView_DataBound(object sender, GridViewEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
    var myObject = (myObject)e.DataItem; 
    if (myObject.IsOverdue()) 
    { 
     e.Row.CssClass = "overdue"; 
    } 
    } 
} 
0

Другим вариантом будет использовать событие CellFormatting. Первая опция показывает доступ к элементу связанных данных и полезна, если у вас нет столбца, настроенного для данных. Второй параметр работает, если есть столбец, видно ли это или нет.

private void dataGridView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) 
     { 
      if (((MyDataObject)dataGridView.Rows[e.RowIndex].DataBoundItem).Condition == Value) 
      { 
       e.CellStyle.BackColor = System.Drawing.Color.Gold; 

      } 
     } 

// Вариант два - можно использовать ColumnIndex вместо ColumnName

private void dataGridView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) 
     { 
      if (dataGridView["ColumnName", e.RowIndex].Value).Condition == TargetValue) 
      { 
       e.CellStyle.BackColor = System.Drawing.Color.Gold; 

      } 
     } 
Смежные вопросы