Порядок Столбцов C# DataGridView

в моем приложении у меня есть DataGridView, источник данных которого изменяется при нажатии кнопки. Например, нажав "всего загрузок" это будет:

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; исправим это...однако для ордена это не имеет никакого значения...

спасибо за помощь!

6 ответов


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

Если это winforms, вы должны иметь возможность изменить порядок отображения столбцов, обратившись к столбцам GridViews DisplayIndex

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

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

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

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


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

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

для меня это не трюк. Нужна еще одна строка:

entityDataGridView.AutoGenerateColumns = false;

С уважением!


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

использование: 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;
        }
    }

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

dataGridView.DataSource = null;
dataGridView.DataSource = MyDataTable;