2013-05-21 6 views
0

У меня есть datagridview, который я заполняю из источника данных, используя dgv.DataSource = table. Затем я использую событие форматирования ячейки, чтобы изменить цвет конкретных ячеек в datagridview в зависимости от значения. Проблема, с которой я сталкиваюсь, заключается в том, что при просмотре данных на некоторых компьютерах некоторые случайные ячейки будут казаться белыми без данных. Код, который я использую для установки цвета, ниже, однако, это не только ячейки, которые я установил цвета, которые кажутся белыми:DataGridView не отображает случайные ячейки

private void dgvRaw_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) 
    { 
     if (e != null) 
     { 
      DataGridView dgv = (DataGridView)sender; 

      if (dFlags.ContainsKey(dgv.Columns[e.ColumnIndex].Name)) 
      { 
       e.CellStyle.ForeColor = Color.Black; 
       // If pass set green else set red 
       if (e.Value != null) 
       { 
        if (e.Value.ToString() == "0") 
         e.CellStyle.BackColor = System.Drawing.Color.Green; 
        else 
         e.CellStyle.BackColor = System.Drawing.Color.Red; 
       } 
       else 
        e.CellStyle.BackColor = System.Drawing.Color.Orange; 
      } 
     } 
    } 

Я буквально понятия не имею, почему это происходит, или, если это происходит из-за компьютеры не в состоянии справиться с оказанием большой вид сетки. Благодаря!

+0

Сколько предметов вы видите в этой сетке? – Ofiris

+0

Чтобы устранить любую ошибку дисплея из уравнения, попробуйте проверить исходный код: находятся ли данные в нем? Если да, но оно не отображается: ошибка отображения. Если нет ... то это что-то еще, и очень странно –

+0

Это зависит от запроса, но, вероятно, где-то в среднем по 100 столбцов и 1000 строк. У меня та же проблема с меньшим представлением сетки данных, у которого только 10 столбцов и 5-20 строк, поэтому я скептически отношусь к размеру набора данных – manicmonkey21421

ответ

0

Как выясняется, проблема с datagridview заключалась в том, что двойная буферизация не включена по умолчанию. Я использовал собственный класс datagridview, чтобы включить двойную буферизацию, и с тех пор у меня не было никаких проблем, я подозреваю, потому что там был такой большой набор данных, что у него были проблемы с рендерингом всей области, а на нижнем конце ПК он просто сдавался. Я включил класс ниже

/// <summary> 
    /// Custom datagridview to enable double buffering 
    /// </summary> 
    public class MyDataGridView : DataGridView 
    { 
     public MyDataGridView() 
     { 
      DoubleBuffered = true; 
     } 
    } 

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

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