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