【发布时间】:2019-07-19 06:54:32
【问题描述】:
我已经声明了 2 个字符串变量:
string fname;
string lname;
当我在 phpMyAdmin 数据库中编写 MySQL 查询时:
SELECT workers.FNAME, workers.LNAME FROM project1.workers INNER JOIN
project1.order_status ON workers.ID_WORKER = order_status.ID_WORKER
INNER JOIN project1.orders ON orders.ID_ORDER = order_status.ID_ORDER
WHERE orders.ORDER_NUMBER = 'TEST' GROUP BY workers.FNAME, workers.LNAME
我有 2 个唤醒者:
-“亚当盖克斯”和
“安德鲁蠕虫”
然后我想存储这个查询中的对象并将该数据加载到 datagridview:
string query1 = string.Format("SELECT workers.FNAME, workers.LNAME FROM project1.workers INNER JOIN project1.order_status " +
"ON workers.ID_WORKER = order_status.ID_WORKER INNER JOIN project1.orders ON orders.ID_ORDER = order_status.ID_ORDER " +
"WHERE orders.ORDER_NUMBER = '"+ NrOrder +"' GROUP BY workers.FNAME, workers.LNAME");
SQLdata.connection.Open();
using (var command = new MySqlCommand(query1, SQLdata.connection))
{
using (var reader1 = command.ExecuteReader())
{
while (reader1.Read())
{
fname = Convert.ToString(reader1[0]);
lname = Convert.ToString(reader1[1]);
}
}
}
我在 while 循环中的代码行中设置了断点,并读取了所有 FNAME 和 LNAME。然后它正确加载所有数据。接下来我想将它们加载到datagridview。
SQLdata.connection.Close();
sick_leaves x = new sick_leaves();
x.FNAME = fname;
x.LNAME = lname;
return x;
并像这样绑定它们:
sick_leaves a = calculate_sickness_leaves(txt_NrOrder.Text);
cu = calculate_sickness_leaves(txt_NrOrder.Text);
var source = new BindingSource();
source.DataSource = cu;
dataGridView2.DataSource = source;
然后使用 Orders.cs 文件中的数据:
public class sick_leaves
{
public string FNAME { get; set; }
public string LNAME { get; set; }
}
在 datagridview 中编译后,我只加载了 1 个 Worker:“Andrew Worm”。那应该是2个worker,所以它没有从sql查询中加载所有数据。
现在:如何将所有数据从 sql 查询加载到 datagridview?有任何想法吗? 警告!我需要桌面应用程序方面的帮助
编辑
我想通过保存代码结构来加载该数据,因为我想通过计算疾病、离开时间来构建该 datagridview。 (带有TimeSpan 对象)。可以这样写吗?
我的代码:
GenerateOrder.cs:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using MySql.Data.MySqlClient;
using System.Windows.Forms.DataVisualization.Charting;
using iTextSharp.text;
using iTextSharp.text.pdf;
using System.IO;
using System.Diagnostics;
namespace ControlDataBase
{
public partial class GenerateChartsOfOrders : Form
{
string fname;
string lname;
sick_leaves cu = new sick_leaves();
public GenerateChartsOfOrders()
{
InitializeComponent();
}
public void loaddata2()
{
string connect = "datasource=localhost;port=3306;username=root;password=";
MySqlConnection connection = new MySqlConnection(connect);
connection.Open();
sick_leaves a = calculate_sickness_leaves(txt_NrOrder.Text);
cu = calculate_sickness_leaves(txt_NrOrder.Text);
var source = new BindingSource();
source.DataSource = cu;
dataGridView2.DataSource = source;
connection.Close();
}
private sick_leaves calculate_sickness_leaves(string NrOrder)
{
string query1 = string.Format("SELECT workers.FNAME, workers.LNAME FROM project1.workers INNER JOIN project1.order_status " +
"ON workers.ID_WORKER = order_status.ID_WORKER INNER JOIN project1.orders ON orders.ID_ORDER = order_status.ID_ORDER " +
"WHERE orders.ORDER_NUMBER = '"+ NrOrder +"' GROUP BY workers.FNAME, workers.LNAME");
SQLdata.connection.Open();
using (var command = new MySqlCommand(query1, SQLdata.connection))
{
using (var reader1 = command.ExecuteReader())
{
while (reader1.Read())
{
fname = Convert.ToString(reader1[0]);
lname = Convert.ToString(reader1[1]);
}
}
}
SQLdata.connection.Close();
sick_leaves x = new sick_leaves();
x.FNAME = fname;
x.LNAME = lname;
return x;
}
}
}
Orders.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ControlDataBase
{
public class sick_leaves
{
public string FNAME { get; set; }
public string LNAME { get; set; }
}
}
SQLData.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MySql;
using MySql.Data.MySqlClient;
namespace ControlDataBase
{
class SQLdata
{
public static MySqlConnection connection = new MySqlConnection
("datasource=localhost;port=3306;username=root;password=");
}
}
【问题讨论】:
-
您可以在 .NET 中使用 ObjectDataSource 并将其绑定到 ASPxGridView
-
@Syafiqur__ 我可以在 .NET 中使用,但我需要桌面应用程序的帮助。
-
代码有几个问题: 1. 你定义了
fname和lname作为表单域。 2. 在calculate_sickness_leaves中,您在while(reader1.Read())中设置这些字段的值 3. 最后从calculate_sickness_leaves返回一个sick_leaves对象。 → 所以基本上,fname和lname将始终包含表最后一行的名字和姓氏,因为 1 和 2。你的DataGridView将始终显示一条记录,因为 3。跨度>
标签: c# mysql .net winforms datagridview