设置DataGridView.DataSource后获取空行

Joo*_*ooj 7 c# datasource datagridview winforms

有人可以告诉我为什么在运行此代码后我得到空行?

...
dataGridView.AutoGenerateColumns = false; //must be false, else getting additional columns from SQL
dataGridView.DataSource = dataSet.Tables[0].DefaultView; 
Run Code Online (Sandbox Code Playgroud)

也试过了

dataGridView.Update();
Run Code Online (Sandbox Code Playgroud)

但没有工作.

行数没问题,但为什么我会得到空行?

我正在使用Winforms.

Joo*_*ooj 17

我发现了这个问题.

我在VS datagridview设计器中设计了列.不是列名,但列DataPropertyName必须与数据库中的字段匹配.

然后还会隐藏重复的列.


Sor*_*scu 9

尝试这些方面:

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;
Run Code Online (Sandbox Code Playgroud)

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;
Run Code Online (Sandbox Code Playgroud)

HTH.


小智 5

我知道你发布这个已经很长时间了,但我遇到了同样的问题并找到了答案,所以我想我会发布它以便其他人可以受益。

您的列为空的原因是您还需要在设计器中设置每个列的 DataPropertyName 以匹配您的数据库字段名称。仅仅设置设计名称是不够的。

希望能帮助某人。


小智 3

您的数据集中包含什么?

也许您的数据集中包含的数据表没有任何行。我会将 AutoGenerateColumns 保留为 true,然后手动隐藏您不想看到的列。我从未使用过 AutoGenerateColumns = false。然而,如果没有更多代码,诊断将变得困难。尝试交换这两个语句(首先是.DataSource)。

AutoGenerateColumns 可能对相应的绑定源(DataSet 中的 DataTable)没有影响。

DataSet需要通过DataAdapter来填充:

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

DataAdapter.Fill(myDataSet);
myDataView = myDataSet.Tables[0].DefaultView;
dataGridView1.DataSource = myDataView
Run Code Online (Sandbox Code Playgroud)