5

我想从文本框中获取数据,然后单击按钮,我希望将该数据插入到GridView. 每次点击都应该创建一个新行,并且不能删除旧行。每当我输入新数据并单击按钮时,我的旧行被删除,新行被存储在它的位置。这是我的代码:

DataTable dt1 = new DataTable();
bool flag = false;  

private void gridVIEWData()
{
   dt1.Columns.Add("pName", typeof(string));
   dt1.Columns.Add("pCategory", typeof(string));
   dt1.Columns.Add("price", typeof(string));
   dt1.Columns.Add("pQuantity", typeof(string));
   dt1.Columns.Add("totalPrice", typeof(string));
}
protected void Button3_Click(object sender, EventArgs e)
{
    if (!flag)
    {
        gridVIEWData();
        flag = true;
        Int32 total = Convert.ToInt32(txt_quantity.Text) * Convert.ToInt32(txt_price.Text);
        DataRow dr = dt1.NewRow();
        dr["pName"] = DropDownList2.SelectedItem;
        dr["pCategory"] = DropDownList1.SelectedItem;
        dr["price"] = txt_price.Text;
        dr["pQuantity"] = txt_quantity.Text;
        dr["totalPrice"] = total;
        dt1.Rows.Add(dr);

        GridView1.DataSource = dt1;
        GridView1.DataBind();
    }
    else if (!IsPostBack)
    {
        Int32 total = Convert.ToInt32(txt_quantity.Text) * Convert.ToInt32(txt_price.Text);
        DataRow dr = dt1.NewRow();
        dr["pName"] = DropDownList2.SelectedItem;
        dr["pCategory"] = DropDownList1.SelectedItem;
        dr["price"] = txt_price.Text;
        dr["pQuantity"] = txt_quantity.Text;
        dr["totalPrice"] = total;
        dt1.Rows.Add(dr);

        GridView1.DataSource = dt1;
        GridView1.DataBind();
    }
}
4

2 回答 2

2

当您将旧数据与新数据绑定时,旧数据将被删除。您必须将旧数据保留在数据源中的哪个数据表中。通常我们有用于存储数据的持久性介质,例如文件数据库。

为了您的理解,我会将数据表存储在 Session 中,但通常不实践,您应该存储在数据库或您喜欢的任何介质中。

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        gridVIEWData();
        GridView1.DataSource = dt1;
        GridView1.DataBind();
    }
}

private void gridVIEWData() {
   dt1.Columns.Add("pName", typeof(string));
   dt1.Columns.Add("pCategory", typeof(string));
   dt1.Columns.Add("price", typeof(string));
   dt1.Columns.Add("pQuantity", typeof(string));
   dt1.Columns.Add("totalPrice", typeof(string));
   Session["dtInSession"] = dt1;     //Saving Datatable To Session 
}


protected void Button3_Click(object sender, EventArgs e)
{
        if(Session["dtInSession"] != null)
             dt1 = (DataTable)Session["dtInSession"]; //Getting datatable from session 

        Int32 total = Convert.ToInt32(txt_quantity.Text) * Convert.ToInt32(txt_price.Text);
        DataRow dr = dt1.NewRow();
        dr["pName"] = DropDownList2.SelectedItem;
        dr["pCategory"] = DropDownList1.SelectedItem;
        dr["price"] = txt_price.Text;
        dr["pQuantity"] = txt_quantity.Text;
        dr["totalPrice"] = total;
        dt1.Rows.Add(dr);

        Session["dtInSession"] = dt1;     //Saving Datatable To Session 
        GridView1.DataSource = dt1;
        GridView1.DataBind();

    }
 }
于 2012-10-13T18:44:40.700 回答
1

这是因为您gridVIEWData();每次都在回发时调用再次创建表列。

试试这个

DataTable dt1 = new DataTable();

private void gridVIEWData() {
    dt1.Columns.Add("pName", typeof(string));
    dt1.Columns.Add("pCategory", typeof(string));
    dt1.Columns.Add("price", typeof(string));
    dt1.Columns.Add("pQuantity", typeof(string));
    dt1.Columns.Add("totalPrice", typeof(string));
}

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        gridVIEWData();
        GridView1.DataSource = dt1;
        GridView1.DataBind();
        Session["dt1"]=dt1;
    }
}

protected void Button3_Click(object sender, EventArgs e)
{
    if(Session["dt1"]!=null) dt1 = (DataTable) Session["dt1"];
    Int32 total = Convert.ToInt32(txt_quantity.Text) * Convert.ToInt32(txt_price.Text);
    DataRow dr = dt1.NewRow();
    dr["pName"] = DropDownList2.SelectedItem.Text;
    dr["pCategory"] = DropDownList1.SelectedItem.Text;
    dr["price"] = txt_price.Text;
    dr["pQuantity"] = txt_quantity.Text;
    dr["totalPrice"] = total.ToString();
    dt1.Rows.Add(dr);

    GridView1.DataSource = dt1;
    GridView1.DataBind();
}
于 2012-10-13T18:23:20.500 回答