0

我正在尝试使用 row[] 在 DataTable CartDT 中添加行,这是一个字符串数组。

DataTable CartDT = new DataTable();
    public void DataTableColumn()
    {
        CartDT.Columns.Add("Product_Name", typeof(string));
        CartDT.Columns.Add("Product_ID", typeof(string));
        CartDT.Columns.Add("ItemQTY", typeof(string));
        CartDT.Columns.Add("Price", typeof(string));
        CartDT.Columns.Add("TotalPrice", typeof(string));

    }
    protected void AddToCart(object sender, GridViewCommandEventArgs e)
    {
        string[] arg = e.CommandArgument.ToString().Split(';');
        int index = Convert.ToInt32(arg[3]);
        TextBox itemQuantity = (TextBox)GridView1.Rows[index].Cells[6].FindControl("txtQty");
        string[] row = new string[5];
        row[0] = arg[0];  //Product_Name
        row[1] = arg[1]; //Product_ID
        row[2] = itemQuantity.Text; //OrderQTY
        row[3] = arg[2]; //Price
 row[4]=(Double.Parse(arg[2]) * Convert.ToInt32(itemQuantity.Text)).ToString();// calculate total price 
        CartDT.Rows.Add(row);//Creating row in Datatable using row[] string array


        GridView2.DataSource = CartDT;
        GridView2.DataBind();
    }

现在,当我执行它时,它给出的错误是“输入数组比此表中的列数长”数组 row[] 中正好有 5 个元素,而且 DataTable CartDT 也有 5 列。现在我无法准确找到我错的地方。请帮助我找到错误。

提前谢谢。

4

3 回答 3

2

而是这样做

DataRow dr = CartDT.NewRow();

然后

dr[0] = arg[0];

等等。到底

 CartDT.Rows.Add(dr);
 CartDT.AcceptChanges();

这样,Row 的实例将具有 CartDT 模式。

DataTable CartDT = new DataTable();

public void CreateDataTableColumns()
{
    CartDT.Columns.Add("Product_Name", typeof(string));
    CartDT.Columns.Add("Product_ID", typeof(string));
    CartDT.Columns.Add("ItemQTY", typeof(string));
    CartDT.Columns.Add("Price", typeof(string));
    CartDT.Columns.Add("TotalPrice", typeof(string));
}

protected void AddToCart(object sender, GridViewCommandEventArgs e)
{
    if (CartDT.Columns.Count = 0)
    {
        CreateDataTableColumns();
    }

    string[] arg = e.CommandArgument.ToString().Split(';');

    int index = Convert.ToInt32(arg[3]);            
    TextBox itemQuantity = 
           (TextBox)GridView1.Rows[index].Cells[6].FindControl("txtQty");

    DataRow dr = CartDT.NewRow();
    dr[0] = arg[0];  //Product_Name
    dr[1] = arg[1]; //Product_ID
    dr[2] = itemQuantity.Text; //OrderQTY
    dr[3] = arg[2]; //Price
    dr[4] = (Double.Parse(arg[2]) * Convert.ToInt32(itemQuantity.Text)).ToString(); // calculate total price

    CartDT.Rows.Add(dr);
    CartDT.AcceptChanges();

    GridView2.DataSource = CartDT;
    GridView2.DataBind();
}
于 2013-03-16T08:19:39.627 回答
1

调试,然后继续

CartDT.Rows.Add(row);

并查看 CartDT 中有多少列;我认为你没有DataTableColumn()在正确的时间打电话。

您与行插入有关的代码工作得很好

        DataTable CartDT = new DataTable();

        CartDT.Columns.Add("Product_Name", typeof(string));
        CartDT.Columns.Add("Product_ID", typeof(string));
        CartDT.Columns.Add("ItemQTY", typeof(string));
        CartDT.Columns.Add("Price", typeof(string));
        CartDT.Columns.Add("TotalPrice", typeof(string));



        string[] row = new string[5];

        row[0] = "1";  //Product_Name
        row[1] = "2"; //Product_ID
        row[2] = "3"; //OrderQTY
        row[3] = "4"; //Price
        row[4] = "5";// calculate total price 
        CartDT.Rows.Add(row);//Creating row in Datatable using row[] string array

        for (int i = 0; i < 5; i++)
        {
            Console.WriteLine(CartDT.Rows[0][i]);
        }

        Console.Read();
于 2013-03-16T08:24:31.330 回答
0

试试下面的代码:

  protected void AddToCart(object sender, GridViewCommandEventArgs e)
    {
        string[] arg = e.CommandArgument.ToString().Split(';');
        int index = Convert.ToInt32(arg[3]);
        TextBox itemQuantity = (TextBox)GridView1.Rows[index].Cells[6].FindControl("txtQty");
        DataRow row = CartDT.NewRow();
        row["Product_Name"] = arg[0];  //Product_Name
        row["Product_ID"] = arg[1]; //Product_ID
        row["OrderQTY"] = itemQuantity.Text; //OrderQTY
        row["Price"] = arg[2]; //Price
        row["TotalPrice"]=(Double.Parse(arg[2]) * Convert.ToInt32(itemQuantity.Text)).ToString();
        CartDt.Rows.Add(row);
        CartDT.AcceptChanges();    
        GridView2.DataSource = CartDT;
        GridView2.DataBind();
     }
于 2013-03-16T08:20:42.553 回答