2012-06-04 2 views
4

У меня есть datagridview и я пытаюсь достичь следующего: 1. Верхняя строка должна быть заморожена при прокрутке по вертикали. 2. Первые две колонки должны быть заморожены, прокручивая горизонтально.Замерзший верхний ряд и первые два столбца в datagridview

Я применил столбец. Freeze = true и его работа отлично, но при применении строки [0] .freeze = true она не работает для замораживания строк.

+0

'строки [0] = .freeze true' означает замораживание ячейки, нет? – leppie

+0

Я предполагаю, что он имел в виду строки [0] .freeze. Я не думаю, что строка [0] .freeze будет компилироваться .. – Niclas

+0

'.Rows [0] .Frozen = true;' должен работать! ! – V4Vendetta

ответ

4

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

Вот код:

DataTable dataTable = new DataTable(); 

    // Just add a bunch of columns 
    for (int i = 0; i < 15; i++) 
    { 
    dataTable.Columns.Add("Col" + i.ToString(), typeof 
    (string)); 
    } 

    // Add a bunch of rows to the DataTable, with some dummy 
    values 
    for (int i = 0; i < 100; i++) 
    { 
    DataRow row = dataTable.NewRow(); 
    for (int j = 0; j < 15; j++) 
    { 
    row["Col" + j.ToString()] = "Val" + i.ToString() + 
    "-" + j.ToString(); 
    } 
    dataTable.Rows.Add(row); 
    } 

    gridView.DataSource = dataTable; 

    gridView.Rows[1].Frozen = true; 

Это не будет работать. Строки не заморожены. Однако, если я придерживаюсь строки gridView.Rows[1].Frozen = true; в обработчике событий кнопки, он работает. Как я могу это сделать, не требуя запуска триггера события от пользователя? Я вижу два решения:

  1. Bind данные таким образом:

    for (int i = 0; i < 15; i++) 
    { 
    DataGridViewTextBoxColumn c = new DataGridViewTextBoxColumn(); 
    c.Name = "Col" + i.ToString(); 
    gridView.Columns.Add(c); 
    } 
    gridView.Rows.Add(100); 
    for (int i = 0; i < 100; i++) 
    for (int j = 0; j < 15; j++) 
    gridView.Rows[i].Cells[j].Value = "Val" + i.ToString() + "-" + j.ToString(); 
    gridView.Rows[0].Frozen = true; 
    
  2. Выберите замороженные строки в этом случае:

    private void gridView_DataBindingComplete(object sender, 
    DataGridViewBindingCompleteEventArgs e) 
    { 
    FrozeFirstRow(); 
    } 
    
+0

замораживание (dataGridViewPlatypi .Rows [0] .Frozen = true;) не работает для меня. –

+0

Я воспроизвел эту проблему, которая произошла на моем сайте только внутри конструктора. Я решил это с помощью VisibleChanged-Event: grivView.VisibleChanged + = (s, e) => {FrozeFirstRow(); }; –

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