2012-12-20 50 views
2

新來的asp.net和C#任何幫助將是偉大的謝謝。插入NameValueCollection到一個數據表,這是給我的錯誤,如這行已經屬於這個表

我的代碼

protected void Button1_Click(object sender, EventArgs e) 
    { 
     string x = "item_name1=number1&item_number1=product1"; 
     NameValueCollection key = HttpUtility.ParseQueryString(x); 
     DataTable Theproducts = new DataTable(); 

     Theproducts.Columns.Add("ProductID"); 
     Theproducts.Columns.Add("ProductName"); 
     DataRow row = Theproducts.NewRow();   
     int index = 1; 
     foreach(string keys in key.AllKeys) 
     { 
      if (keys == ("item_number" + index.ToString())) 
      { 
       row["ProductID"] = key[keys]; 
      } 
      if (keys == ("item_name" + index.ToString())) 
      { 
       row["ProductName"] = key[keys]; 
      } 
      Theproducts.Rows.InsertAt(row, 0); 
     } 
     GridView1.DataSource = Theproducts; 
     GridView1.DataBind(); 
    }//end of button 

收到錯誤該行已經屬於此表。

回答

3

您需要在foreach循環內移動DataRow聲明。

foreach(string keys in key.AllKeys) 
{ 
     DataRow row = Theproducts.NewRow(); 
     if (keys == ("item_number" + index.ToString())) 
     { 
      row["ProductID"] = key[keys]; 
     } 
     if (keys == ("item_name" + index.ToString())) 
     { 
      row["ProductName"] = key[keys]; 
     } 
     Theproducts.Rows.InsertAt(row,0); 
} 

目前正在創建的DataRow對象外的foreach循環,並在每次迭代你想插入同一個對象的數據表。這就是你遇到錯誤的原因。

+0

創建的運動的新的行的創建到迴路將解決的問題是它會技術人員例如將顯示的productid第二列則跳過產品名,並將其添加到其中的第二行。 – Neo

0

你需要移動的行插入你的循環

DataRow row = Theproducts.NewRow(); 
    foreach(string keys in key.AllKeys) 
    { 
     ------- 
    }  
    Theproducts.Rows.InsertAt(row, 0); 

外面在你的代碼,您嘗試插入同一行的每一個關鍵的存在(兩次或更多次)。但是你的表模式需要一個只有兩列的行。
所以你需要等待循環結束,然後再嘗試插入。

0

這就像你一次又一次地向數據表中添加相同的實例(行)。您正在修改相同的行對象。作爲新的行對象在每次迭代

int index = 1; 
    foreach(string keys in key.AllKeys) 
    { 
     DataRow row = Theproducts.NewRow(); 

     if (keys == ("item_number" + index.ToString())) 
     { 
      row["ProductID"] = key[keys]; 
     } 
     if (keys == ("item_name" + index.ToString())) 
     { 
      row["ProductName"] = key[keys]; 
     } 
     Theproducts.Rows.InsertAt(row, 0); 
    } 
相關問題