C#:用DataTable填充DataGridView创建空表

C#:用DataTable填充DataGridView创建空表,c#,mysql,datagridview,C#,Mysql,Datagridview,我搜索了web和Stack Overflow,找到了很多关于如何用DataTable的内容填充DataGridView的描述。但这对我还是不起作用。My DataGridView显示正确的列数和行数,但它们显示为空 我使用以下方法: public void ShowDataInGrid(ref DataTable table) { BindingSource sBind = new BindingSource(); dbView.Columns.Clear

我搜索了web和Stack Overflow,找到了很多关于如何用DataTable的内容填充DataGridView的描述。但这对我还是不起作用。My 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),有多个列和行(其中一列的名称为“Date”)。它肯定充满了可读的数据。 我主要使用以下命令阅读该表(在此之后,我通过几个不同的步骤操作数据,如更改字符串和添加数字…):

我认为问题可能是,表条目存储为对象而不是字符串,因此无法显示。这就是为什么我试图通过对我的表进行以下更改来强制内容为字符串:

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);
}
这对我也没有帮助。 另一个想法是:我发现了一些关于类似问题的评论,这些问题显然通过引用得到了解决:“我在VS datagridview设计器中设计了列。不是列名,而是列DataPropertyName必须与数据库中的字段匹配。”不幸的是,我似乎无法做到/理解这一点

下面是我的输入表的一行


尝试通过这种方式获取并设置为GridView

        SqlLiteConnection con = new SqlLiteConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=DB.mdf;Integrated Security=True");
        con.Open();
        SqlLiteDataAdapter adap = new SqlLiteDataAdapter("select * from Bank", con);
        DataSet ds = new System.Data.DataSet();
        adap.Fill(ds);
        dataGridView1.DataSource = ds.Tables[0];
评论你到目前为止所做的一切,试试这个,让我知道这是否适合你。根据您的数据库更改连接。

我解决了问题。 数据表很好。问题是DataGridView dbView的设置。我在设计器中设置了dbView,并以某种方式为其提供了一个数据源。现在,我将datasource设置为“none”(在“DataGridView任务”中),我的数据按预期显示。 谢谢M Adeel Khalid看了我的东西。他向我保证我的链接代码是正确的,使我最终找到了解决方案。 最后,我真的只需要使用一行:

dbView.DataSource = table;

您能否简明扼要地定义您的问题?DataViewTable显示的表具有正确的行数(与绑定表相同),但没有内容。每个单元格都是空的。您是否看到表在执行查询后有数据?
table.Load(reader)是表中当然有数据。以下命令填充singleRowContent:singleRowContent[row]=Convert.ToString(table.Rows[row][0]);但是,我需要“Convert”,否则会出现错误:singleRowContent[row]=FDBHandler.dbable.Rows[row][0];(无法隐式地将类型对象转换为字符串)我用您的代码创建了一个新的test()。我唯一需要更改的是@“Data Source=test.sqlite;AttachDbFilename=DB.mdf;integratedsecurity=True”);-->ds被填充(可以在调试模式下看到),但dataGridView1没有被填充(甚至没有空单元格)。-->我添加了dataGridView1.Columns.Add(“Date”,“Date”);通过这种方式,我再次将单元格放入视图,但它们仍然是空的。你能在快照中共享表的结构和数据吗?好的,我在原始帖子中添加了一行数据表的快照。问题在于你的值,而不是获取和设置网格的代码。在设置网格的
datasource
之前,您可能需要正确地保存或获取它们。当您填充
数据集时,在其上做一个
for循环
,获取所有列并查看它们的值,然后设置正确的值,即将它们转换为您希望的任何格式,最后设置
gridView1.datasource=ds
,非常感谢您的想法。我还怀疑datatable中的值是问题所在。我会再仔细看看这个。(我已经尝试将它们作为字符串转换到datatable中)
dbView.DataSource = table;