2013-06-10 20 views
8

В моем приложении у меня есть DataGridView, который зависит от источника данных, на кнопку, которую вы нажимаете. E.G. Щелчок «Total Загрузки» будет:C# DataGridView Column Order

dataGridView1.DataSource = totalDownloads(); 

Или скачивает на игрока

dataGridView1.DataSource = playerDownloads(); 

Каждый метод получает данные с помощью SQL запроса и возвращает DataTable этой информации.

Однако, с моим следующим кодом:

dataGridView1.DataSource=getStats(); 
public DataTable getStats() 
    { 
     DataTable table1 = new DataTable("Totals"); 
     table1.Columns.Add("Park Name"); 
     table1.Columns.Add("Author"); 
     table1.Columns.Add("Total Downloads"); 
     table1.Columns[2].DataType = typeof(int); 
     table1.Columns.Add("Rating (Max 5)");   
     table1.Columns[3].DataType = typeof(float); 
     table1.Rows.Add(name,author,download, rating); 
     } 
     return table1; 
    } 

Я ожидал увидеть colums в порядке: «Название парка» «Автор» «Всего загрузок» «Рейтинг» Однако, они приходят в «Загрузки »,« Имя парка »,« Автор »,« Рейтинг »

Я читал, что добавление: dataGridView1.AutoGenerateColumns = false; исправит это ... однако это не имеет никакого отношения к порядку вообще ...

благодарит за помощь!

ответ

13

Это проект WinForms или Asp.net один?

Если это WinForms вы должны быть в состоянии изменить порядок столбцов отображаются при получении доступа к GridViews Столбцы DisplayIndex

dataGridView1.Columns["Park Name"].DisplayIndex = 0; // or 1, 2, 3 etc 
+1

Спасибо за ваш ответ Хотя это работает ... Мне очень интересно, почему они не появлялись в правильном порядке, в первую очередь. Я использую DataGridView для много больших проектов, но я никогда не испытывал этого раньше .... – user1662290

+0

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

3

Пытаться играть с индексом дисплея, как этот

private void AdjustColumnOrder() 
{ 
    customersDataGridView.Columns["Park Name"].DisplayIndex = 0; 
    customersDataGridView.Columns["Author"].DisplayIndex = 1; 
    customersDataGridView.Columns["Total Downloads"].DisplayIndex = 2; 
} 
+1

Спасибо Это работает сейчас – user1662290

0

Для меня это не трюк. Еще одна линия необходимо:

entityDataGridView.AutoGenerateColumns = false; 

С уважением!

+0

Если вы используете базу данных, вы почти всегда хотите, чтобы это значение было установлено в true. –

7

Мое простое решение для столбцов, находящихся вне порядка, состоит в том, чтобы добавить этот цикл, который устанавливает DisplayIndex в Index.

foreach (DataGridViewColumn col in grid.Columns) { 
    col.DisplayIndex = col.Index; 
} 

The Index присваиваются каждый столбец, как они будут добавлены. Я не уверен, почему DisplayIndex выйдет из строя, но этот скрипт исправит его.

0

У меня была та же проблема. Я решил с:

1

Я нашел это очень полезным.

Использование: ColumnDisplayOrder («Название парка, автор, общее количество загрузок», myDataGridView);

private void ColumnDisplayOrder(string columnList, DataGridView gridView) 
    { 
     var columnListArray = columnList.Split(','); 
     for (var i = 0; i < columnListArray.Length; i++) 
     { 
      var gridViewColumn = gridView.Columns[columnListArray[i].Trim()]; 
      if (gridViewColumn != null) 
       gridViewColumn.DisplayIndex = i; 
     } 
    } 
+0

Это интересно. Мне придется попробовать это когда-нибудь. –