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

コードでは、存在するすべてのキーに対して同じ行を挿入しようとします (2 回以上)。ただし、テーブル スキーマでは、列が 2 つしかない行が必要です。
したがって、挿入を試みる前に、ループの終わりを待つ必要があります。

于 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 に答える