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));
}
美しい人ありがとう!別のメモは、私のgridview rowdataboundで私はviewstateのリストから値を設定していないことだった...それは私の悪い.. – Andres
申し訳ありません、私はあなたを得るdid'nt。あなたはあなたの状況を詳述できますか? –
あなたのロジックが正しく追加/更新するのを助けますが、私が間違っていたのは、グリッドをデータバインドするときでした。コントロールの値を正しく設定していました。リストに格納されている値を把握していなかったアイテムいつも空白を表示しています。実績 – Andres