2011-12-07 16 views
1

目的はショッピングカートのようなものなので、リストに項目を追加すると(詳細)、メモリに追加している項目が保持されます。 これは、最初にリスト(グリッド)を読み込んでさらに行を追加するときに機能します。しかし、最初の行を設定してアイテムと価格を設定してからさらに3行を追加すると決めた場合、追加した情報は で削除され、値を保持する代わりに削除され、リストに多くの行が読み込まれます。 これまでデータテーブルでこれを行っていましたが、それから移動してこのリストクラスを使用できるようにしたいと考えています また、私はviewstateとして設定していますので、私のページからそれを使うことができます。ジェネリックリストクラスの読み込み、更新、表示

private ListArDocumentdetail Detail 
{ 
    get 
    { 
     ListArDocumentdetail _detail = new ListArDocumentdetail(); 
     if (ViewState["Detail"] != null) 
     { 
      _detail = (ListArDocumentdetail)ViewState["Detail"];  
     } 
     return _detail; 
    } 
    set 
    { 
     ViewState["Detail"] = value; 
    } 
} 
protected void Page_Load(object sender, EventArgs e) 
{ 
    //creates 2 rows to start off 
    CreateRows(2); 
} 
public void CreateRows(int rowstoadd) 
{ 
    int newtotalrows = Detail.Count + rowstoadd - 1; 
    for (int i = Detail.Count; i <= newtotalrows; i++) 
    { 
     ArDocumentdetail detail = new ArDocumentdetail(); 
     detail.Lineid = i; 
     detail.Itemid = 0; 
     detail.Quantity = 1; 
     if (Detail.Count > 0) 
      Detail.Insert(Detail.Count, detail); 
     else 
      Detail.Add(detail); 

     Detail = Detail; 
    } 
    gvInvoiceDetail.DataSource = Detail; 
    gvInvoiceDetail.DataBind(); 

    GridViewRow row = gvInvoiceDetail.Rows[gvInvoiceDetail.Rows.Count - 1]; 
    ImageButton btnAdd = (ImageButton)row.FindControl("btnAdd"); 
    btnAdd.Visible = true; 
} 
protected void ibAdd_Click(object sender, ImageClickEventArgs e) 
{ 
    //user can type in how many rows they want to add on to current amount of rows 
    //so since grid starts off at 2 and they type 3 the grid refreshes with 5 rows. 
    CreateRows(Convert.ToInt32(txtRows.Text)); 
} 

protected void UpdateRow(object sender, EventArgs e) 
{ 
    ImageButton btnUpdate = sender as ImageButton; 
    GridViewRow row = btnUpdate.NamingContainer as GridViewRow; 

    TextBox txtPrice = (TextBox)row.FindControl("txtPrice"); 
    TextBox txtQuantity = (TextBox)row.FindControl("txtQuantity"); 
    DropDownList ddlDescription = (DropDownList)row.FindControl("ddlDescription"); 

    int index = Detail.FindIndex(f => f.Lineid == row.RowIndex); 
    Detail[index].Itemid = Convert.ToInt32(ddlDescription.SelectedValue); 
    Detail[index].Price = Convert.ToDecimal(txtPrice.Text); 
    Detail[index].Subtotal = Convert.ToDecimal(Detail[index].Price * Convert.ToInt32(txtQuantity.Text)); 

} 

答えて

1

私はあなたのロジックを提案することができます:

  1. ビューステートへのプッシュリストはのViewState [ "一覧"]、
  2. は、ユーザーが項目を選択してみましょうと言います。リストリスト=(リスト)ビューステート["リスト"];
  3. 選択した項目をリストリストに追加します。すなわち、list.Add(item);
  4. アイテムをビューステートに戻します。 Viewstate ["list"] = list;
  5. グリッドにバインドするか、ページに表示します。あなたが望むものなら、なんでも。
+0

美しい人ありがとう!別のメモは、私のgridview rowdataboundで私はviewstateのリストから値を設定していないことだった...それは私の悪い.. – Andres

+0

申し訳ありません、私はあなたを得るdid'nt。あなたはあなたの状況を詳述できますか? –

+0

あなたのロジックが正しく追加/更新するのを助けますが、私が間違っていたのは、グリッドをデータバインドするときでした。コントロールの値を正しく設定していました。リストに格納されている値を把握していなかったアイテムいつも空白を表示しています。実績 – Andres

関連する問題