【发布时间】:2017-01-30 10:59:25
【问题描述】:
我搜索了 Web 和 Stack Overflow,发现了很多关于如何用 DataTable 的内容填充 DataGridView 的描述。但它仍然对我不起作用。我的 DataGridView 显示了正确的列数和行数,但它们显示为空。
我使用以下方法:
public void ShowDataInGrid(ref DataTable table)
{
BindingSource sBind = new BindingSource();
dbView.Columns.Clear();
dbView.AutoGenerateColumns = false;
sBind.DataSource = table;
dbView.DataSource = sBind; //Add table to DataGridView
dbView.Columns.Add("Date", "Date");
}
在此之前,我通过设计器创建了一个名为“dbView”的 DataGridView。我什至不确定是否需要 sBind。如果没有它,我可以直接将表绑定到 dbView,但结果相同。
我怀疑我的桌子有问题。它起源于数据库 (SQLite),有几列和几行(其中一列的名称为“日期”)。它肯定充满了可读数据。 我主要使用以下命令读取表格(之后我通过几个不同的步骤操作数据,例如更改字符串和添加数字......):
string sql = "select * from Bank";
SQLiteCommand command = new SQLiteCommand(sql, m_dbConnection);
SQLiteDataReader reader = command.ExecuteReader();
table.Load(reader);
reader.Close();
table.AcceptChanges();
我认为问题可能在于,表条目存储为对象而不是字符串,因此无法显示。这就是为什么我试图通过对我的表进行以下更改来强制内容为字符串:
DataTable dbTableClone = new DataTable();
dbTableClone.Load(reader);
SQLiteDataReader reader.Close();
dbTableClone.AcceptChanges();
string[] dBHeader = new string[dbTableClone.Columns.Count];
dBHeader = ReadHeaderFromDataTable(dbTableClone); //own funktion, which reads the header
DataTable table;
table.Clear();
//will first create dbTable as empty clone, so I can set DataTyp of each Column
table = dbTableClone.Clone();
for (int col = 0; col > dBHeader.Length; col++) //first set all columns as string
{
dbTable.Columns[col].DataType = typeof(string);
}
foreach (DataRow Row in dbTableClone.Rows)
{
dbTable.ImportRow(Row);
}
这对我也没有帮助。 另一个想法:我在类似的问题上发现了一些 cmets,显然用引用解决了它:“我在 VS datagridview 设计器中设计了列。不是列名,但列 DataPropertyName 必须与数据库中的字段匹配。”不幸的是,我似乎无法做到/理解这一点。
下面是我输入表的一行。
【问题讨论】:
-
你能简明扼要地定义你的问题吗?
-
DataViewTable 显示具有正确行数的表(与绑定表相同)但没有内容。每个单元格都是空的。
-
执行完查询后你看到表有数据了吗?
table.Load(reader); -
是的表肯定有数据。以下命令填充 singleRowContent: singleRowContent[row] = Convert.ToString(table.Rows[row][0]);但是我需要“转换”,否则我会收到错误:singleRowContent[row] = FDBHandler.dbable.Rows[row][0]; (不能将类型对象隐式转换为字符串)
标签: c# mysql datagridview