2012-10-13 7 views
5

Tôi muốn lấy dữ liệu từ hộp văn bản và bấm vào nút, tôi muốn dữ liệu đó được chèn vào GridView. Trên mỗi nhấp chuột, sẽ có một hàng mới được tạo và không được xóa hàng cũ. Bất cứ khi nào tôi nhập dữ liệu mới và bấm vào nút, hàng cũ của tôi bị xóa và hàng mới được lưu trữ thay cho nó. Đây là mã của tôi:Làm thế nào để chèn dữ liệu từ hộp văn bản vào GridView trên nút bấm trong ASP.NET

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(); 
    } 
} 
+0

Điều gì xảy ra trong 'Page_Load'? Cân nhắc đổi tên các nút của bạn. Mục đích của 'Button3' không rõ ràng. –

Trả lời

2

Các dữ liệu cũ này được lấy ra khi bạn gắn nó với dữ liệu mới. Bạn phải giữ dữ liệu cũ trong nguồn dữ liệu mà bảng dữ liệu trong trường hợp của bạn. Thông thường chúng tôi có phương tiện liên tục để lưu trữ dữ liệu như cơ sở dữ liệu của tệp.

Đối với sự hiểu biết của bạn, tôi sẽ lưu trữ datatable trong phiên nhưng nó thường không được thực hành, bạn nên lưu trữ trong cơ sở dữ liệu hoặc những gì bao giờ vừa bạn muốn.

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

    } 
} 
+0

thanx rất nhiều Adil bây giờ làm việc của nó. đánh giá cao giúp đỡ ur .. :) –

+0

Bạn được chào đón, nhưng phiên không có nghĩa là cho ít này về các phiên http://msdn.microsoft.com/en-us/library/ms178581(v=vs.100).aspx – Adil

+0

Tôi không nghĩ rằng đó là một ý tưởng tốt để lưu trữ datatable trong phiên. Đọc liên kết http://stackoverflow.com/questions/12811932/using-session-to-store-datatable –

1

Điều này là do bạn đang gọi gridVIEWData(); mỗi lần đăng lại tạo cột bảng một lần nữa.

Hãy thử

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(); 
} 
+0

bạn có thể sửa nó trong mã của tôi không. hoặc nơi tôi shud gọi nó. ?? –

+0

bây giờ im nhận được lỗi của cột 'pName' không thuộc về bảng ... :( –

+0

thanx rất nhiều @ jams ... vấn đề được giải quyết nhưng tôi apreciate ur phản ứng và giúp đỡ ... –