C# 如何以干净、正确的方式缩短将数据库绑定到Datagridview的代码
我一直希望我的代码更清晰易读。我在这里是为了实现这一目标。既然我是初学者,最好早点学。我希望有人能给我一个建议和一个正确的方法来做这些 PS:我有一个Tabcontrol,数据库中有3个tabpage、3个Datagridview和3个表 这是我的密码C# 如何以干净、正确的方式缩短将数据库绑定到Datagridview的代码,c#,winforms,C#,Winforms,我一直希望我的代码更清晰易读。我在这里是为了实现这一目标。既然我是初学者,最好早点学。我希望有人能给我一个建议和一个正确的方法来做这些 PS:我有一个Tabcontrol,数据库中有3个tabpage、3个Datagridview和3个表 这是我的密码 public partial class SIMSSupplier : UserControl { ADDSupplier supply; public SIMSSupplier() { Initializ
public partial class SIMSSupplier : UserControl
{
ADDSupplier supply;
public SIMSSupplier()
{
InitializeComponent();
}
public DataTable dbdataset;
public DataSet ds = new DataSet();
public string ID = "SPPLR-000";
public int DeliveryID;
public int OrderID;
DataView db;
public void SupplierDetails()
{
using (var con = SQLConnection.GetConnection())
{
using (var select = new SqlCommand("Select SupplierID, Companyname, Contactname, Contactnumber as 'Contact Number', Date, Address, Remarks from Supplier_Details", con))
{
using (var sda = new SqlDataAdapter())
{
sda.SelectCommand = select;
dbdataset = new DataTable();
sda.Fill(dbdataset);
var bsource = new BindingSource();
bsource.DataSource = dbdataset;
Supplierview.DataSource = bsource;
sda.Update(dbdataset);
}
}
}
}
public void DeliveryDetails()
{
using (var con = SQLConnection.GetConnection())
{
using (var select = new SqlCommand("Select PurchaseID, Supplier, Itemdescription, Date, Quantity, Unitcost, Amount, Salesinvoice, Codeitems, Patientname from Purchase_Delivery", con))
{
using (var sda = new SqlDataAdapter())
{
sda.SelectCommand = select;
dbdataset = new DataTable();
sda.Fill(dbdataset);
var bsource = new BindingSource();
bsource.DataSource = dbdataset;
PurchaseDeliveries.DataSource = bsource;
sda.Update(dbdataset);
}
}
}
}
public void OrderDetails()
{
using (var con = SQLConnection.GetConnection())
{
using (var select = new SqlCommand("Select PurchaseID, Supplier, Itemdescription, Date, Quantity, Unitcost, Amount, Salesinvoice, Codeitems, Patientname from Purchase_Order", con))
{
using (var sda = new SqlDataAdapter())
{
sda.SelectCommand = select;
dbdataset = new DataTable();
sda.Fill(dbdataset);
var bsource = new BindingSource();
bsource.DataSource = dbdataset;
PurchaseOrder.DataSource = bsource;
sda.Update(dbdataset);
}
}
}
}
}
研究编写枯燥的代码。每次更新都会重复相同的代码。您可以有一个更新DataGrid的例程:
private void UpdateDataGrid(DataGridView grid, string sql)
{
using (var connection = SQLConnection.GetConnection())
using (var command = new SqlCommand(sql, connection))
using (var adapter = new SqlDataAdapter())
{
adapter.SelectCommand = command;
dbdataset = new DataTable();
adapter.Fill(dbdataset);
grid.DataSource = new BindingSource { DataSource = dbdataset };
adapter.Update(dbdataset);
}
}
如果我是你,如果你不想改变你的代码架构,我会重构类似的代码,如果你未来的所有请求都会有相同的代码
public partial class SIMSSupplier : UserControl
{
private ADDSupplier supply;
public DataTable dbdataset;
public DataSet ds = new DataSet();
public string ID = "SPPLR-000";
public int id;
DataView db;
public SIMSSupplier()
{
InitializeComponent();
}
public void SupplierDetails()
{
DoRequestAndFill(Supplierview, "Select SupplierID, Companyname, Contactname, Contactnumber as 'Contact Number', Date, Address, Remarks from Supplier_Details");
}
public void DeliveryDetails()
{
DoRequestAndFill(PurchaseDeliveries, "Select PurchaseID, Supplier, Itemdescription, Date, Quantity, Unitcost, Amount, Salesinvoice, Codeitems, Patientname from Purchase_Delivery");
}
public void OrderDetails()
{
DoRequestAndFill(PurchaseOrders, "Select PurchaseID, Supplier, Itemdescription, Date, Quantity, Unitcost, Amount, Salesinvoice, Codeitems, Patientname from Purchase_Order");
}
private void DoRequestAndFill(DataGridView grid, string request)
{
using (var con = SQLConnection.GetConnection())
using (var select = new SqlCommand(request, con))
using (var sda = new SqlDataAdapter())
{
dbdataset = new DataTable();
sda.SelectCommand = select;
sda.Fill(dbdataset);
grid.DataSource = new BindingSource() { DataSource = dbdataset };
sda.Update(dbdataset);
}
}
}
这取决于项目的大小和您想要什么,但您可能应该考虑在MVC体系结构中进行。至少所有数据库对的调用都应该在另一个类中
还有,我真的不喜欢和你一样的名字
public string ID = "SPPLR-000";
public int id;
作为第一次阅读,我应该知道它是什么,这是有点困惑。如果您停止您的程序并在几个月后返回,您可能也会感到困惑(我不知道代码中使用了什么)
最后,如果你的“ID”是一个参数,如果值不会改变,请考虑使用关键字“const”。
希望我是有帮助的我认为这个问题属于一个技巧,你知道你可以使用C#中的块来堆叠
,对吗?工作代码应该转到codereview.stackexchange.com,我两天前问过这类问题,但没有人对我说过。我投票结束这个问题,因为它属于codereview.stackexchange.com。这些代码是否适用于3个表?select查询中存在差异,因为它们选择的是不同的tables@Anonymous您可以通过sql
参数传入select查询。谢谢您的帮助,我也很乐意在您发布的代码中记下它,您可能在OrderDetails
中更新了错误的网格。您需要将DataGridView
传递到DoRequestAndFill
,因为他正在更新不同的网格。请看我基本相同的答案。谢谢你的帮助,我很乐意接受你的建议。有这么多不同的设计模式,MVC是好的,但我的目标不是:)好吧,如果不做纯MVC,你应该把模型(数据库访问)放在单独的类中,原因有很多:如果你想每天更改数据库,你所有的电话都会在同一个地方。如果你想选择,或者如果你正在寻找一个特定的电话,也都在这里。您可以使用抽象类/静态方法调用简单的调用(或实现Stutton PATNEN),注意“代码> OrthDealths可能需要一个名为 PurraseSeords<代码>的网格,每个OP的最新评论。“是一个参数,如果值不会改变”你说的值不会改变是什么意思?我的id在增加它在改变?