Как использовать собственные имена заголовков в DataGridView, заполненном базой данных? - PullRequest
0 голосов
/ 25 октября 2018

Я пытаюсь использовать свой собственный текст заголовков в DataGridView, который автоматически заполняется из базы данных.Я попытался dataGridView1.AutoGenerateColumns = false, затем сделать что-то вроде создания столбцов:

    void createSearchResultHeader()
    {
        foreach(var prop in typeof(DB.Message).GetProperties())
        {
            var display =
               typeof(DB.Message)
               .GetProperty(prop.Name)
               .GetCustomAttributes(typeof(System.ComponentModel.DisplayNameAttribute), inherit: false)
               .FirstOrDefault() as System.ComponentModel.DisplayNameAttribute;
            DataGridViewColumn col = new DataGridViewTextBoxColumn();
            col.HeaderText = display.DisplayName;
            dataGridView1.Columns.Add(col);
        }
    }

, а затем загрузить результаты с:

            using (var conn = createConnection())
            using (var da = new SQLiteDataAdapter(createCommand(conn)))
            using (var dt = new DataSet())
            {
                dt.Locale = System.Globalization.CultureInfo.InvariantCulture;
                da.Fill(dt);
                dg.DataSource = dt.Tables[0].DefaultView;
            }

Проблема заключается в dataGridView1.AutoGenerateColumns = false столбцысоздаются (я вызываю createSearchResultHeader() при загрузке формы), но результат из базы данных пуст, но если я изменяю dataGridView1.AutoGenerateColumns = true, результаты из базы данных загружаются успешно, но он добавляет свои собственные столбцы, а не использует те, которые созданы createSearchResultHeader().Как я могу это исправить?

1 Ответ

0 голосов
/ 25 октября 2018

Вы должны установить DataGridViewColumn.DataPropertyName :

void createSearchResultHeader()
{
    foreach(var prop in typeof(DB.Message).GetProperties())
    {
        var display =
           typeof(DB.Message)
           .GetProperty(prop.Name)
           .GetCustomAttributes(typeof(System.ComponentModel.DisplayNameAttribute), inherit: false)
           .FirstOrDefault() as System.ComponentModel.DisplayNameAttribute;
        DataGridViewColumn col = new DataGridViewTextBoxColumn();
        col.HeaderText = display.DisplayName;
        col.DataPropertyName = prop.Name; // Add this
        dataGridView1.Columns.Add(col);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...