从一个datagridview添加多行到datagridview c#windows窗体

时间:2016-05-13 12:31:15

标签: c# winforms datagridview

我有这段代码,我将一个网格视图数据插入另一个

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; 
}

我能够一次插入一行,但我想一个接一个地插入很多行。

enter image description here

4 个答案:

答案 0 :(得分:1)

您应该将DataTable声明为全局,因为每次在Button上单击它都会使用新的关键字进行实例化。

答案 1 :(得分:0)

试试这个:

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; 
}

答案 2 :(得分:0)

如果您正在从一个视图读取到另一个视图,则可以使用循环结构来完成每次迭代。我建议使用for循环,以便您可以使用当前的数字迭代作为指令的一部分。如果你想将第一个视图推荐到第二个视图那么你可能想要使用

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

答案 3 :(得分:0)

来自DataSource的{​​{1}}属性接受一组对象。 所以,我建议你在公共的对象集合中添加你想要的行数,最后更新DataGridView DataSource

点击此处获取更多信息:MSDN 此外,这里有一个nice question可以帮助您。

作为骨架,您可以这样设计:

gridviewDtaInserted.DataSource = myCollection;

我希望它会对你有所帮助。否则,请问:)

修改

另外,尝试使用BindingList而不是List,我不确定,但是一旦项目插入集合中,它可能会自动更新网格的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; } }

DataSource