2012-10-13 10 views
5

Chcę pobrać dane z pól tekstowych, a na przycisku kliknij Chcę dane te należy wstawić do GridView. Przy każdym kliknięciu powinien zostać utworzony nowy wiersz, a stary wiersz nie może zostać usunięty. Za każdym razem, gdy wprowadzam nowe dane i klikam przycisk, mój stary wiersz jest usuwany, a zamiast niego zapisywany jest nowy wiersz. Tu jest mój kodu:Jak wstawić dane z pól tekstowych do GridView na przycisku kliknij w 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

Co dzieje się w "Page_Load'? Rozważ zmianę nazw swoich przycisków. Cel 'Button3' nie jest oczywisty. –

Odpowiedz

2

Stare dane są usuwane, jak powiązać go z nowymi danymi. Musisz zachować stare dane w źródle danych, które tabelę danych w twoim przypadku. Zazwyczaj mamy trwałe medium do przechowywania danych takich jak baza danych plików.

Dla zrozumienia Będę przechowywać datatable w sesji, ale zazwyczaj nie jest praktykowany, należy przechowywać w bazie danych lub co średnio lubisz.

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 alot Adil teraz działa. . appreciated ur help .. :) –

+0

Serdecznie zapraszamy, ale sesja nie jest przeznaczona do tego o sesjach http://msdn.microsoft.com/en-us/library/ms178581(v=vs.100).aspx – Adil

+0

Nie wydaje mi się, że warto przechowywać datatable w sesji. Przeczytaj link http://stackoverflow.com/questions/12811932/using-session-to-store-datatable –

1

To dlatego dzwonisz gridVIEWData(); za każdym razem na odświeżenie że ponownie utworzyć kolumny tabeli.

Spróbuj

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

możesz poprawić go w moim kodzie. lub gdzie ja to nazywam. –

+0

Teraz otrzymuję komunikat o błędzie z kolumny "pName" nie należy do tabeli ... :( –

+0

thanx alot @jams ... problem został rozwiązany, ale doceniam odpowiedź i pomoc ... –

Powiązane problemy