有人可以告诉我为什么在运行此代码后我得到空行?
...
dataGridView.AutoGenerateColumns = false; //must be false, else getting additional columns from SQL
dataGridView.DataSource = dataSet.Tables[0].DefaultView;
也试过
dataGridView.Update();
但没有工作。
行数没问题,但为什么我会得到空行?
我正在使用Winforms。
答案 0 :(得分:16)
我发现了问题。
我在VS datagridview设计器中设计了列。不是列名,但列DataPropertyName必须与数据库中的字段匹配。
然后重复的列也会隐藏。
答案 1 :(得分: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;
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。
答案 2 :(得分:4)
此外,如果您使用AutoGenerateColumns = false,请确保添加了一些绑定列,否则每个记录都会显示一个空行
答案 3 :(得分:4)
我知道你发布这篇文章已经有很长一段时间了,但我遇到了同样的问题并找到了答案,所以我想我会发布它以便别人可以受益。
列是空白的原因是因为您还需要设置设计器中每个列的DataPropertyName以匹配您的数据库字段名称。仅设置设计名称是不够的。
希望能有所帮助。
答案 4 :(得分:3)
您的DataSet中包含哪些内容?
可能DataSet中包含的DataTable没有任何行。我会将AutoGenerateColumns保留为true,只需手动隐藏您不希望看到的列。我从未使用过AutoGenerateColumns = false。但是,如果没有更多代码,就很难诊断出来。尝试交换这两个语句(.DataSource优先)。
AutoGenerateColumns可能对相应的绑定源(DataSet中的DataTable)没有影响。
DataSet需要填充DataSet:
// Example
DataAdapter = new SqlDataAdapter();
DataAdapter = CreateInventoryAdapter();
DataAdapter.TableMappings.Add("Table", "GARAGE");
DataAdapter.Fill(myDataSet);
myDataView = myDataSet.Tables[0].DefaultView;
dataGridView1.DataSource = myDataView
答案 5 :(得分:1)
好的更广泛的样本:
我在设计师中写了一些专栏:
列名:customerID and customerFirstName
列标题文字:Ident. and First name
然后我从sql表中获取一些数据......
sql = "select customerID, customerFirstName From customer;";
dataGridView.AutoGenerateColumns = false;
dataGridView.DataSource = dataSet.Tables[0].DefaultView;
和sql表列与dataGridView中的列名相同。
dataGridView.AutoGenerateColumns = false;
是带有headerText Ident. | First name
的双列dataGridView时得到的结果。
当我设置dataGridView.AutoGenerateColumns = true;
时,我得到如下的dataGridView列:
Ident. | First name | customerID | customerFirstName
。
Ident
和First name
下面的所有行都是empty
,而customerID
和customerFirstName
下面的所有其他行都是ok
。
现在我希望customerID
和customerFirstName
下方的行位于Ident
和First name
下,而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;
答案 6 :(得分:1)
Me.dgvList.AutoGenerateColumns = False
Dim col = New DataGridViewTextBoxColumn()
col.DataPropertyName = "VisitNo"
col.HeaderText = "Sr. No."
dgvList.Columns.Add(col)
它有效
答案 7 :(得分:1)
万一仍有问题,我的问题是我试图绑定到类public Fields而不是属性。更改为属性,即{得到; set;}对其进行了修复。
答案 8 :(得分:0)
尝试在加载Grid之前添加此代码
dataGridView.ColumnCount = 0;
答案 9 :(得分:0)
所以我有一个自定义实现,我让用户能够保存列的类似excel的过滤器。
我将结果加载到网格中,但由于列上类似excel的过滤器无法匹配任何内容,因此没有任何内容出现。
答案 10 :(得分:0)
我知道它已经晚了但是我的案例解决方案并没有自定义datagridview列。只需添加一个空白的datagridview&绑定它。
答案 11 :(得分:0)
在我的情况下,没有行可见,因为我是由LINQ生成数据的,并且忘记了在末尾添加对.ToArray()
的调用。将数据行转换为数组后,它可以工作。