我是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()
如果我在mysql workbench中运行相同的查询
,这就是结果答案 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