为什么我的datagridview没有显示任何结果?

时间:2016-07-07 06:08:43

标签: mysql vb.net datagridview

我是vb.net的新手,我正试图在我的datagridview中显示mysql服务器的结果。任何人都可以指出我的代码有什么问题吗?提前谢谢。

为了安全起见我的连接字符串,但确实连接了。如果我在代码中放置一个断点,它会用正确的数据填充数据集

Dim con As New MySqlConnection("server=;user id=;password=;database=")
    con.Open()

    Dim adp As New MySqlDataAdapter("Select CONCAT(FirstName,' ',Surname) as Name, LeaveDaysAvailable as 'Leave Days Available' from leave_database.Employees;", con)

    Dim ds As New DataSet()
    adp.Fill(ds)

    dgvMain.DataSource = ds


    con.Close()

这是结果。没有错误.... enter image description here

如果我在mysql workbench中运行相同的查询

,这就是结果

enter image description here

2 个答案:

答案 0 :(得分:2)

DataSet不直接包含数据。它有一个Tables集合,其中包含DataTable个对象,每个对象都包含数据。如果您将DataSet分配给DataSource的{​​{1}}属性,则还需要设置DataGridView属性以告知其DataMember获取数据从

问题是,您尚未命名DataTable,因此您无需分配DataTable。这一行:

DataMember

实际上会创建一个adp.Fill(ds) ,填充它并将其添加到DataTable集合中。它没有名称,所以你没有名字来设置Tables。您需要先命名DataMember,例如

DataTable

然后您可以设置adp.Fill(ds, "MyDataTable")

DataMember

另一种方法是绑定dgvMain.DataMember = "MyDataTable" dgvMain.DataSource = ds 而不是DataTable,在这种情况下,您不需要名称:

DataSet

但问题是,如果你只想使用一个dgvMain.DataSource = ds.Tables(0) ,为什么要首先创建一个DataSet?只需创建一个DataTable。然后,您可以将DataTable传递给DataTable来电,并将其分配给Fill媒体资源。

答案 1 :(得分:1)

dataGridView1.AutoGenerateColumns = true;

否则您必须使用设计器文件或类似

之类的代码向数据网格添加列
DataGridTextColumn textColumn = new DataGridTextColumn(); 
dataColumn.Header = "First Name"; 
dataColumn.Binding = new Binding("Name"); 
dataGrid.Columns.Add(textColumn); 

DataGridTextColumn textColumn = new DataGridTextColumn(); 
dataColumn.Header = "Leave day available"; 
dataColumn.Binding = new Binding("LeaveDaysAvailable"); 
dataGrid.Columns.Add(textColumn);

使用设计师这可能会对您有所帮助https://msdn.microsoft.com/en-us/library/dyyesckz(v=vs.100).aspx