Получение пустых строк после установки DataGridView. DataSource

Я сказал бы, что один из самых больших камней преткновения будет мучиться над моделью данных / рабочий процесс. Я предсказываю, что это возьмет длинный время и включит много аргументов о том, что должно произойти с ошибкой при определенных обстоятельствах, что действительно составляет ошибку, и т.д. А не проведите месяцы, споря туда и сюда, если необходимо было просто развернуть предварительно созданную систему, большинство людей изучит, как использовать его и сделать лучшее из него, неважно, какие решения уже фиксируются. Выберите что-то открытый исходный код, и можно всегда настраивать его позже в случае необходимости - который будет очень более быстр, чем прокрутка собственного с нуля.

7
задан marc_s 16 December 2017 в 22:03
поделиться

5 ответов

Что содержится в вашем DataSet?

Возможно, в DataTable, содержащемся в вашем DataSet, нет строк. Я бы оставил AutoGenerateColumns равным true и просто вручную скрыл, какие столбцы вы не хотите видеть. Я никогда не использовал AutoGenerateColumns = false. Однако без дополнительного кода его будет сложно диагностировать. Попробуйте поменять местами эти два оператора (сначала .DataSource).

AutoGenerateColumns может не влиять на соответствующий источник привязки (DataTable из DataSet).

DataSet должен быть заполнен DataAdapter:

// Example
DataAdapter = new SqlDataAdapter();
DataAdapter = CreateInventoryAdapter();
DataAdapter.TableMappings.Add("Table", "GARAGE");

DataAdapter.Fill(myDataSet);
myDataView = myDataSet.Tables[0].DefaultView;
dataGridView1.DataSource = myDataView
3
ответ дан 6 December 2019 в 05:03
поделиться

Я нашел проблему.

Я разработал столбцы в конструкторе VS datagridview. Не имя столбца, а имя столбца DataPropertyName должно совпадать с полями в базе данных.

Тогда также будут скрыты повторяющиеся столбцы.

17
ответ дан 6 December 2019 в 05:03
поделиться

Попробуйте что-нибудь в этом роде:

grid.AutoGenerateColumns = false;

DataGridViewColumn col = new DataGridViewTextBoxColumn();
col.DataPropertyName = "Prop1";
col.HeaderText = "Property 1";
grid.Columns.Add(col);

col = new DataGridViewTextBoxColumn();
col.DataPropertyName = "Prop2";
col.HeaderText = "Property 2";
grid.Columns.Add(col);

grid.DataSource = dataSet.Tables[0].DefaultView;

Prop1 и Prop2 должны соответствовать именам столбцов вашей таблицы. Свойство 1 и свойство 2 - это отображаемый текст заголовка.

РЕДАКТИРОВАТЬ:

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

Сделайте следующее:

1. Удалите все столбцы, добавленные с помощью конструктора 2. Добавьте этот код:

grid.AutoGenerateColumns = false;

DataGridViewColumn colID = new DataGridViewTextBoxColumn();
colID.DataPropertyName = "customerID";
colID.HeaderText = "Ident.";
grid.Columns.Add(colID);

DataGridViewColumn colName = new DataGridViewTextBoxColumn();
colName.DataPropertyName = "customerFirstName";
colName.HeaderText = "First name";
grid.Columns.Add(colName);    
grid.DataSource = dataSet.Tables[0].DefaultView;

HTH.

9
ответ дан 6 December 2019 в 05:03
поделиться

Кроме того, если вы используете AutoGenerateColumns = false, убедитесь, что вы добавили несколько связанных столбцов, иначе вы получите пустую строку для каждой записи

4
ответ дан 6 December 2019 в 05:03
поделиться

Хорошо, более расширенный пример:

Я сделал в дизайнере несколько столбцов:

имена столбцов: customerID и customerFirstName

заголовок столбца Текст: Идент. и First name

, затем я получаю данные из таблицы sql ...

sql = "select customerID, customerFirstName From customer;";

dataGridView.AutoGenerateColumns = false;
dataGridView.DataSource = dataSet.Tables[0].DefaultView;

и столбцы таблицы sql такие же, как имена столбцов в dataGridView.

Результат, который я получаю, когда dataGridView.AutoGenerateColumns = false ; - это dataGridView с двумя столбцами с идентификатором headerText . | Имя .

Когда я устанавливаю dataGridView.AutoGenerateColumns = true; , я получаю такие столбцы dataGridView: и First name

, затем я получаю данные из таблицы sql ...

sql = "select customerID, customerFirstName From customer;";

dataGridView.AutoGenerateColumns = false;
dataGridView.DataSource = dataSet.Tables[0].DefaultView;

и столбцы таблицы sql такие же, как имена столбцов в dataGridView.

Результат, который я получаю, когда dataGridView.AutoGenerateColumns = false ; представляет собой dataGridView с двумя столбцами с идентификатором headerText . | Имя .

Когда я устанавливаю dataGridView.AutoGenerateColumns = true; , я получаю такие столбцы dataGridView: и First name

, затем я получаю данные из таблицы sql ...

sql = "select customerID, customerFirstName From customer;";

dataGridView.AutoGenerateColumns = false;
dataGridView.DataSource = dataSet.Tables[0].DefaultView;

и столбцы таблицы sql такие же, как имена столбцов в dataGridView.

Результат, который я получаю, когда dataGridView.AutoGenerateColumns = false ; - это dataGridView с двумя столбцами с идентификатором headerText . | Имя .

Когда я устанавливаю dataGridView.AutoGenerateColumns = true; , я получаю такие столбцы dataGridView: Идент. | Имя | customerID | customerFirstName .

все строки ниже Ident и First name пустые , а все остальные строки ниже customerID и customerFirstName are ok .

Теперь я хочу, чтобы строки ниже customerID и customerFirstName находились в Ident и Имя и столбцы customerID и customerFirstName должны быть скрыты.

Я написал этот код, и он работает:

 DataTable dTable = dataGridView.GetTable().Tables[0];

 foreach (DataRow dataRow in dataGridView.GetTable().Tables[0].Rows)
 {
    int n = dataGridView.Rows.Add();
    foreach (DataColumn dataColumn in dTable.Columns)
    {
       dataGridView.Rows[n].Cells[dataColumn.ColumnName].Value = dataRow[dataColumn.ColumnName].ToString();
    }
 }

Но почему DataGridView не делает этого для меня с помощью этого кода:

dataGridView.DataSource = dataSet.Tables [0] .DefaultView;

1
ответ дан 6 December 2019 в 05:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: