2015-05-22 2 views
0

Мне нужно выделить строки gridview на основе значений из datatable. Я выделил такие значения, как если бы определенные значения ячеек удовлетворяли некоторым условиям, то я могу выделить этот код.Выделите строку gridview на основе значений datatable

if(int.Parse(DataBinder.Eval(e.Row.DataItem,"Risk").ToString()) > 100) 
    { 
     e.Row.BackColor = Color.FromName("#FAF7DA"); 
    } 

Теперь мои вопросы, на мой RowDataBound случае я хочу, чтобы проверить значения в DataTable и мне нужно, чтобы выделить значения в GridView.

protected void OnRowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      DataTable dt = DataRepository.highlightRow(); 
      string[] strInactive = dt.AsEnumerable().Select(row => row.Field<string>("product_id")).ToArray(); 
      foreach (GridViewRow row in gvProducts.Rows) 
      { 
       for (int i = 0; i < gvProducts.Columns.Count; i++) 
       { 
        if (gvProducts.Rows[0].Cells[0].Text.Contains("how to pass array values")) 
        { 
         e.Row.BackColor = System.Drawing.Color.Red; 
        } 
       } 
      } 
     } 
    } 

Для бывших: Здесь DataTable будет возвращать только один столбец значений, как это, 10, 20, 20. Тогда мне нужно выделить строки этих значений в GridView.

+0

В чем проблема, с которой вы сталкиваетесь? Что не работает? –

+0

@ j.f. - Я изо всех сил пытаюсь проверить значения данных в gridview. Я выделил строки, которые имеют статические значения и больше или меньше. Но для меня это выглядит немного сложнее. –

+0

во-первых, ваш код будет тратить слишком много времени, не обязательно. потому что 1. 'DataTable dt = DataRepository.highlightRow();' вызывается в каждой строке. 2. foreach и для циклов на каждой строке. – naveen

ответ

2

вы должны быть в состоянии проверить e.Row.DataItem для значений, которые отвечают вашим критериям

Вы можете сделать что-то подобное в RowDataBound событие:

if (e.Row.RowType == DataControlRowType.DataRow) { 
    DataRowView drv = (DataRowView) e.Row.DataItem; 

    if(drv("Risk") == <some condition>) { 
    e.Row.BackColor = Drawing.Color.Black // :) 
    } 
} 
+0

Что мне нужно дать в определенном состоянии? Как я могу проверить значения данных в gridview. –

+0

Является ли datatable источником данных для gridview? – fnostro

+0

Нет данных, которые не являются источником данных для gridview. Это отдельный, и я делаю соединение с данными, имеющими отношение к источнику gridview. Мне нужно выделить совпадающие строки. –

0

Возможно, это то, что вы ищете:

private const System.Drawing.Color HIGHLIGHT = System.Drawing.Color.Yellow; 
    private const System.Drawing.Color NORMAL = System.Drawing.Color.White; 

    protected void OnRowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      DataTable dt = DataRepository.highlightRow(); 
      string[] strInactive = dt.AsEnumerable().Select(row => row.Field<string>("product_id")).ToArray(); 
      foreach (var value in strInactive) 
      { 
       e.Row.BackColor = (e.Row.Cells[0].Text == value) ? HIGHLIGHT : NORMAL; 
      } 
     } 
    } 

Я не знаю, что находится в вашем DataTable, поэтому я не знаю, что вы хотите проверить.

+0

ОК, спасибо за быстрый ответ. Предположим, что мои данные возвращают три значения, такие как G-01, G-02, G-03. Теперь мне нужно проверить это значение в первой строке gridview и выделить их. Datatable значения динамические, и они будут продолжать меняться. –

+0

Я редактировал код, чтобы включить цикл foreach, используя результаты таблицы. Будет ли это вам, где вы хотите быть? – jp2code

+0

Логика выглядит идеально для меня, но строки не выделяются. –

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