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

时间:2017-01-30 10:59:25

标签: c# mysql datagridview

我搜索了网络和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),并且有多个列和行(其中一列的名称为" Date")。它肯定充满了可读数据。 我主要使用以下命令读取表格(之后我在几个不同的步骤中操作数据,如更改字符串和添加数字......):

        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);
}

这对我没有帮助。 另一个想法:我发现了类似问题的一些评论,它显然已经用引号解决了:"我在VS datagridview设计器中设计了列。不是列名,但列DataPropertyName必须与数据库中的字段匹配。"不幸的是,我似乎无法理解这一点。

下面你看到我输入表的一行。

enter image description here

2 个答案:

答案 0 :(得分:0)

尝试以这种方式提取和设置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];

评论您目前所做的所有事情,试试这个并告诉我这是否适合您。根据您的数据库更改连接。

答案 1 :(得分:0)

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

my_ressource = {
  'schema': {
    'list_of_dicts': {
      'type': 'list',
      'schema': {
        'type': 'dict',
        'schema': {
          'name': {'type': 'string'},
          'age': {'type': 'integer'},
        }
      }
    }
  }
}

DOMAIN = {
    'my_ressource': my_ressource,
}