Заполните DataSource DataGridView существующими столбцами

Есть ли способ заполнить DataSource DataGridView, используя существующие столбцы?

Я пытаюсь установить DataSource в свой DataGridView; каждый раз, когда я устанавливаю свой источник данных, он создает новые столбцы, что не является ожидаемым результатом. Я хочу, чтобы данные были представлены в существующих столбцах.

Это мой код:

DataTable dt = new DataTable();
dt.Columns.Add("SourcePath", typeof(string));
dt.Columns.Add("SourceFile", typeof(string));
dt.Columns.Add("OutputPath", typeof(string));
dt.Columns.Add("OutputFile", typeof(string));
dt.Columns.Add("Status", typeof(string));
dt.Columns.Add("Message", typeof(string));

dt.Rows.Add(new object[] { "Test", "Test", "Test", "Test", "Test", "Belgium" });
dt.Rows.Add(new object[] { "Test", "Test", "Test", "Test", "Test", "France" });
dt.Rows.Add(new object[] { "Test", "Test", "Test", "Test", "Test", "Germany" });
dt.Rows.Add(new object[] { "Test", "Test", "Test", "Test", "Test", "Spain" });
dt.Rows.Add(new object[] { "Test", "Test", "Test", "Test", "Test", "Switzerland" });
dt.Rows.Add(new object[] { "Test", "Test", "Test", "Test", "Test", "United Kingdom" });

datagridview.DataSource = dt;

Я делаю что-то не так здесь?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
56
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Синтаксис может быть причиной этого.

    DataTable dt = new DataTable();
    dt.Columns.Add("SourcePath", typeof(string));
    dt.Columns.Add("SourceFile", typeof(string));
    dt.Columns.Add("OutputPath", typeof(string));
    dt.Columns.Add("OutputFile", typeof(string));
    dt.Columns.Add("Status", typeof(string));
    dt.Columns.Add("Message", typeof(string));


  
    var Row = dt.NewRow(); //Create a new row
    Row["SourcePath"] = "Test";//Add Column value via Indexer
    //Add Rest of Column Values

    dt.Rows.Add(Row); //Append to Table Rows

Синтаксис в OP правильный.

Jimi 17.03.2022 23:34

Если вы не хотите, чтобы сетка генерировала столбцы, которые она находит в источнике данных и, кажется, отсутствует сама по себе, установите

datagridview.AutoGenerateColumns = false;

прежде чем установить DataSource

Ответ принят как подходящий

Когда DataSource DataGridView установлен или изменен, поведение по умолчанию заключается в создании столбцов с использованием имен столбцов в источнике данных, поскольку свойство AutoGenerateColumns по умолчанию равно true.
См. раздел "Примечания" в Документах об этом свойстве.

Если в конструкторе добавлены DataGridViewColumns, свойство DataPropertyName каждого столбца сравнивается с именем столбца в источнике данных.
Когда соответствие найдено, существующий DataGridViewColumns привязывается к соответствующему столбцу в источнике данных. В противном случае в сетку добавляется новый столбец. Другими словами, как кажется, это то, что описывает OP, когда столбцы добавляются в конструкторе без DataPropertyName и устанавливается новый источник данных, столбцы в источнике данных добавляются к уже присутствующим в сетке.

Если DataPropertyName DataGridViewColumn не указан в конструкторе, вы можете установить его в коде перед назначением свойства DataSource. Например:

var dt = new DataTable();
dt.Columns.Add(new DataColumn("SourcePath", typeof(string)) { Caption = "Source Path"});  
// [...]

dt.Rows.Add(new[] { "Test", "Test", "Test", "Test", "Test", "Belgium" });
// [...]

// Assuming DGV Columns are added in the Designer without a DataPropertyName set
datagridview.Columns[0].DataPropertyName = dt.Columns[0].ColumnName
datagridview.Columns[0].HeaderText = dt.Columns[0].Caption

// Or in different ways, e.g.: 
datagridview.Columns["SourcePath"].DataPropertyName = dt.Columns[0].ColumnName
datagridview.Columns["SourcePath"].HeaderText = dt.Columns[0].Caption
// [...]

datagridview.DataSource = dt;

Другие вопросы по теме