Изменение порядка столбцов в DataTable, привязанном к DataGridView, не отражается в представлении - PullRequest
7 голосов
/ 31 января 2009

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

Этот пример демонстрирует,

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    public DataTable data = new DataTable();

    private void button1_Click(object sender, EventArgs e)
    {

        this.dataGridView1.DataSource = data;
        for (int i = 0; i < 5; i++)
        {
            this.data.Columns.Add(i.ToString());
        }
    }

    private void button2_Click(object sender, EventArgs e)
    {
        DataColumn foo = new DataColumn();
        this.data.Columns.Add(foo);
        foo.SetOrdinal(0);
    }

    private void button3_Click(object sender, EventArgs e)
    {
        foreach (DataColumn tmpCol in this.data.Columns)
        {
            Console.WriteLine("{0} : {1}", tmpCol.ColumnName, tmpCol.Ordinal);
        }
    }
}

Кнопка 1 генерирует столбцы, кнопка 2 добавляет столбец и устанавливает порядковый номер 0, поэтому он должен быть первым в сетке, кнопка 3 отображает порядковые номера столбцов и показывает, какими они должны быть в DataTable .

Ответы [ 3 ]

10 голосов
/ 31 января 2009

Так работает DataGridView; при включенном автоматическом генерировании столбцов дополнительные (неотображенные) столбцы добавляются в конец. Вы можете отсоединить и повторно связать, чтобы исправить это; установите для DataSource значение null и вернитесь к таблице:

this.dataGridView1.DataSource = null;
this.dataGridView1.Columns.Clear();
this.dataGridView1.DataSource = data;
2 голосов
/ 03 июля 2013

У меня была похожая проблема, и я решил ее с помощью свойства DataGridViewColumn.DisplayIndex.

dgvData.Columns["COLUMN_NAME"].DisplayIndex = 0;  // will move your custom column to first position
0 голосов
/ 01 октября 2013

Не забудьте включить и выключить AutoColumnCreate, чтобы убедиться, что вы работаете с DisplatIndex.

http://www.internetworkconsulting.net/content/datadridview-displayorder-not-working

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...