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.
尝试这些方面:
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)