Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何以干净、正确的方式缩短将数据库绑定到Datagridview的代码_C#_Winforms - Fatal编程技术网

C# 如何以干净、正确的方式缩短将数据库绑定到Datagridview的代码

C# 如何以干净、正确的方式缩短将数据库绑定到Datagridview的代码,c#,winforms,C#,Winforms,我一直希望我的代码更清晰易读。我在这里是为了实现这一目标。既然我是初学者,最好早点学。我希望有人能给我一个建议和一个正确的方法来做这些 PS:我有一个Tabcontrol,数据库中有3个tabpage、3个Datagridview和3个表 这是我的密码 public partial class SIMSSupplier : UserControl { ADDSupplier supply; public SIMSSupplier() { Initializ

我一直希望我的代码更清晰易读。我在这里是为了实现这一目标。既然我是初学者,最好早点学。我希望有人能给我一个建议和一个正确的方法来做这些

PS:我有一个Tabcontrol,数据库中有3个tabpage、3个Datagridview和3个表

这是我的密码

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在增加它在改变?