簡體   English   中英

從一個datagridview向datagridview c#Windows窗體添加多行

[英]Adding multiple row from one datagridview to datagridview c# windows form

我有這段代碼,通過它我可以將一個網格視圖數據插入到另一個

private void btnADD_Click(object sender, EventArgs e)
{
    DataTable dt = new DataTable();
    DataRow dr;
    dt.Columns.Add("LOB");
    dt.Columns.Add("Quantity");
    dt.Columns.Add("Name");
    dt.Columns.Add("Packing");
    dt.Columns.Add("Price");
    dt.Columns.Add("Code");
    dr = dt.NewRow();
    dr["LOB"] = txtLOB.Text;
    dr["Quantity"] = txtQuantity.Text;
    dr["Name"] = txtName.Text;
    dr["Packing"] = txtPacking.Text;
    dr["Price"] = txtPrice.Text;
    dr["Code"] = txtBachNo.Text;
    dt.Rows.Add(dr);
    gridviewDtaInserted.DataSource = dt; 
}

我能夠一次插入一行,但我想一次又一次插入很多行。

在此處輸入圖片說明

您應該將DataTable聲明為全局數據,因為每次單擊Button時,它都會用新的關鍵字實例化。

嘗試這個:

DataTable dt = new DataTable();
dt.Columns.Add("LOB");
dt.Columns.Add("Quantity");
dt.Columns.Add("Name");
dt.Columns.Add("Packing");
dt.Columns.Add("Price");
dt.Columns.Add("Code");

private void btnADD_Click(object sender, EventArgs e)
{
    DataRow dr;

    for(int i = 0; i <= RowsCountThatYouWantToIsert; i++)
    {
        dr = dt.NewRow();
        dr["LOB"] = txtLOB.Text;
        dr["Quantity"] = txtQuantity.Text;
        dr["Name"] = txtName.Text;
        dr["Packing"] = txtPacking.Text;
        dr["Price"] = txtPrice.Text;
        dr["Code"] = txtBachNo.Text;
        dt.Rows.Add(dr);
    }

    gridviewDtaInserted.DataSource = dt; 
}

如果要從一個視圖讀取到另一個視圖,則可以使用循環結構來遍歷每個迭代。 我建議使用for循環,以便您可以將當前的數值迭代用作指令的一部分。 如果您想將第一個視圖修改為第二個視圖,則可以使用

DataTable dt = new DataTable();
DataTable dt2 = new DataTable();
dt=(DataTable)DataGridViewer1.datasource;
dt2=(DataTable)DataGridViewer2.datasource;
dt2.Merge(dt);
DataGridViewer2.datasource=dt2;

來自DataGridViewDataSource屬性接受對象的集合。 因此,我建議您向該對象的公共集合中添加所需的行數,最后更新DataSource gridviewDtaInserted.DataSource = myCollection;

請參閱此處更多信息: MSDN此外,這是一個很好的問題,可能會對您有所幫助。

作為骨架,您可以通過以下方式進行設計:

public class TestFunctional {
    public TestFunctional(){
        DataItems = new List<DataItem>();
    }

    public List<DataItem> DataItems { get; set; }

    private void AddOneItem(){
        var newItem = new DataItem {
            LOB = "a",
            Quantity = 1,
            Name = "A",
            Packing = true,
            Code = "a1"
        };

        DataItems.Add(newItem);

        RefreshGrid();
    }

    private void AddMultipleItems(){
        var newItem1 = new DataItem {
            LOB = "a",
            Quantity = 1,
            Name = "A",
            Packing = true,
            Code = "a1"
        };

        var newItem2 = new DataItem {
            LOB = "b",
            Quantity = 2,
            Name = "B",
            Packing = false,
            Code = "b2"
        };

        DataItems.Add(newItem1);
        DataItems.Add(newItem2);

        /*or use DataItems.AddRange( ... ) */

        RefreshGrid();
    }

    private void RefreshGrid()
    {
        gridviewDtaInserted.Rows.Clear();
        gridviewDtaInserted.Refresh();

        gridviewDtaInserted.DataSource = DataItems;
    }
}

public class DataItem{
    public string LOB { get; set; }
    public double Quantity { get; set; }
    public string Name { get; set; }
    public bool Packing { get; set; }
    public decimal Price { get; set; }
    public string Code { get; set; }    
}

希望對您有幫助。 否則,請問:)


編輯:

另外,我不確定使用BindingList而不是List,但是不確定如何,只要將一個項目插入集合中,它就會自動更新網格的DataSource

BindingList<DataItem> DataItems

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM