填充C#的DataTable行

时间:2013-03-16 08:12:32

标签: c# asp.net datatable datarow arrays

我正在尝试使用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列。 现在我无法找到我错在哪里。 请帮我找一下这个bug。

提前完成。

3 个答案:

答案 0 :(得分: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();
}

答案 1 :(得分: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();

答案 2 :(得分: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();
     }