C# 我一直在向同一行插入数据

C# 我一直在向同一行插入数据,c#,C#,请帮我找出我做错了什么,我的datagridview是数据绑定的,所以我不能添加新行,所以我必须创建一个datatable才能这样做,有一个问题我无法解决,因为我试图将添加的数据添加到同一行。请帮助了解为什么会发生这种情况,或者找到更好的解决方法,而不是新的一行 public void getAllData(string stockCode, string description, string unit, string quantity, string costPrice,

请帮我找出我做错了什么,我的datagridview是数据绑定的,所以我不能添加新行,所以我必须创建一个datatable才能这样做,有一个问题我无法解决,因为我试图将添加的数据添加到同一行。请帮助了解为什么会发生这种情况,或者找到更好的解决方法,而不是新的一行

public void getAllData(string stockCode, string description, string unit, string quantity, string costPrice,
          string saleprice, string taxcode)
{
    DataTable table = new DataTable();

    DataRow dr = table.NewRow();
    table.Columns.Add(new DataColumn("stk_code"));
    table.Columns.Add(new DataColumn("stk_description"));
    table.Columns.Add(new DataColumn("quantity"));
    table.Columns.Add(new DataColumn("uom"));
    table.Columns.Add(new DataColumn("discount"));
    table.Columns.Add(new DataColumn("tax_code"));
    table.Columns.Add(new DataColumn("stk_sale_price_one"));

    dr[0] = stockCode;
    dr[1] = description;
    dr[2] = quantity;
    dr[3] = 0;
    dr[4] = unit;
    dr[5] = taxcode;
    dr[6] = saleprice;

    invoiceItemDataView.DataSource = table;

    table.Rows.Add(dr);
    table.AcceptChanges();
}

为什么每次设置行时都要创建表列?你不必那样做。在程序开始时做一次。就这样

创建表:

  private DataTable CreateDataTable()
    {

        DataTable table = new DataTable();

        table.Columns.Add(new DataColumn("stk_code"));
        table.Columns.Add(new DataColumn("stk_description"));
        table.Columns.Add(new DataColumn("quantity"));
        table.Columns.Add(new DataColumn("uom"));
        table.Columns.Add(new DataColumn("discount"));
        table.Columns.Add(new DataColumn("tax_code"));
        table.Columns.Add(new DataColumn("stk_sale_price_one"));

        return table;
    }
将其初始化为将设置为DataGridView的DataTable:

   private DataTable dt;

    public MyClass()
    {
        InitializeComponent();
        dt = CreateDataTable();
    }
现在,将数据表发送到方法

getAllData(dt, "1", "2", "2", "2",
                  "2", "s", "s");
            dataGridView1.DataSource = dt;
最后,将新行插入数据表:

public void getAllData(DataTable table, string stockCode, string description, string unit, string quantity, string costPrice,
      string saleprice, string taxcode)
    {
        int index = table.Rows.Count > 0 ? table.Rows.Count : 0;
        DataRow dr = table.NewRow();
        dr[0] = stockCode;
        dr[1] = description;
        dr[2] = quantity;
        dr[3] = 0;
        dr[4] = unit;
        dr[5] = taxcode;
        dr[6] = saleprice;

        table.Rows.InsertAt(dr, index);
        table.AcceptChanges();
    }

希望这对您有所帮助。

不需要table.AcceptChanges();谢谢,但是我得到了这个错误{“对象引用未设置为对象的实例。”}@this Line int index=table.Rows.Count>0?table.Rows.Count:0;datagridview是databound,这表示添加的内容是从另一个databound datagridview(搜索表单)传递的,我在这里使用getAllData方法。当我尝试按您的方式执行此操作时,我得到一个异常@我指示的行。之前在我发布问题之前,我只能将数据传递到第一行,当我再次尝试传递时,我最终替换了同一行,而我有了一个新添加的行,我也可以将焦点设置为新行。这意味着您在作为参数发送到GetData之前不会创建datatable。您的数据表为空。您应该像这样创建数据表
dt=CreateDataTable()插入行之前。我在这里发布之前测试了我的代码@我应该把getAlldata方法发送到哪里,Hepl非常感谢。
        public void getData(string stockCode, string description, string unit, string quantity, string costPrice,
          string saleprice, string taxcode)
{
    DataTable table = new DataTable();

    DataRow dr = table.NewRow();
    table.Columns.Add(new DataColumn("stk_code"));
    table.Columns.Add(new DataColumn("stk_description"));
    table.Columns.Add(new DataColumn("quantity"));
    table.Columns.Add(new DataColumn("uom"));
    table.Columns.Add(new DataColumn("discount"));
    table.Columns.Add(new DataColumn("tax_code"));
    table.Columns.Add(new DataColumn("stk_sale_price_one"));

    dr[0] = stockCode;
    dr[1] = description;
    dr[2] = quantity;
    dr[3] = 0;
    dr[4] = unit;
    dr[5] = taxcode;
    dr[6] = saleprice;



    table.Rows.Add(dr);
    invoiceItemDataView.DataSource = table;
}
        public void getData(string stockCode, string description, string unit, string quantity, string costPrice,
          string saleprice, string taxcode)
{
    DataTable table = new DataTable();

    DataRow dr = table.NewRow();
    table.Columns.Add(new DataColumn("stk_code"));
    table.Columns.Add(new DataColumn("stk_description"));
    table.Columns.Add(new DataColumn("quantity"));
    table.Columns.Add(new DataColumn("uom"));
    table.Columns.Add(new DataColumn("discount"));
    table.Columns.Add(new DataColumn("tax_code"));
    table.Columns.Add(new DataColumn("stk_sale_price_one"));

    dr[0] = stockCode;
    dr[1] = description;
    dr[2] = quantity;
    dr[3] = 0;
    dr[4] = unit;
    dr[5] = taxcode;
    dr[6] = saleprice;



    table.Rows.Add(dr);
    invoiceItemDataView.DataSource = table;
}