2

asp.net 和 C# 的新手,任何帮助都会很棒谢谢。

我的代码

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

收到错误此行已属于此表。

4

3 回答 3

3

您需要DataRow在 foreach 循环内移动声明。

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

目前,您正在foreach 循环之外创建 DataRow 对象,并且在每次迭代中,您都尝试将相同的对象插入到数据表中。这就是您收到错误的原因。

于 2012-12-20T08:55:24.803 回答
0

您需要将行插入移动到循环之外

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

在您的代码中,您尝试为每个存在的键插入相同的行(两次或多次)。但是您的表架构需要一行只有两列。
因此,在尝试插入之前,您需要等待循环结束。

于 2012-12-20T08:55:52.833 回答
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);
    }
于 2012-12-20T08:56:38.420 回答