2016-11-17 19 views
3

請幫忙弄清楚我做錯了什麼,我的datagridview是數據綁定,所以我不能添加一個新的行,所以我創建了一個數據表以便能夠這樣做,有一個問題我無法擺脫,因爲我嘗試添加添加到同一行的數據。而不是新行,請幫助弄清楚爲什麼會發生這種情況或更好的方法來解決它。我一直插入數據到同一行

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

回答

-1
static DataTable MyTable = null; //store the table data; 

//may be you means "AddData"? 
public void AddData(string stockCode, string description, string unit, string quantity, string costPrice, 
      string saleprice, string taxcode) 
{ 
    DataTable table = MyTable 
    if(table == null) 
    { 
     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")); 
     MyTable = table; 
    } 

    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.Add(dr); 
    table.AcceptChanges(); 

    invoiceItemDataView.DataSource = table; 
} 
1

你爲什麼要創建表列的每個設置行時間?你不需要那個。在程序開始時執行一次。像這樣。

創建表:

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:

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

希望這有助於你。

+0

謝謝,但我得到這個錯誤{「對象引用未設置爲對象的實例。」} @ this Line int index = table.Rows.Count> 0? table.Rows.Count:0; – home

+0

@home你能更新你的問題嗎? – Badiparmagi

+0

datagridview是數據綁定,即內容添加正在從另一個數據綁定datagridview(搜索形式)傳遞那是我在哪裏使用我的getAllData方法。當我嘗試這樣做你的方式我得到一個異常@我指出的行。以前我發佈了這個問題,我只能將數據傳遞給第一行,當我嘗試再次傳遞時,我最終替換了同一行,而我有一個新增的行,我可以將焦點設置到新行。 – home

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

不需要table.AcceptChanges(); – Manish