2

マイページは、多くの製品とさまざまなサイズのオプションがある一括注文フォームです。

ラベル付きの 3 つの静的列を持つグリッドビューがあります。次に、動的に構築された列がいくつかあります。

動的に構築された各列には、テキストボックスがあります。テキストボックスは数量用です。

テキストボックスが変更されるたびに入力された数量でサーバーを更新するか (おそらく ontextchanged イベント)、各行を列ごとにループして、数量を持つすべてのアイテムを収集し、それらのアイテムとその数量を一度に処理しようとしています。 (ボタンonclick経由)。

GridView を構築するプロセスを if(!Page.IsPostBack) の背後に置くと、textchanged イベントが発生すると、グリッドビューは静的フィールドのみを取得し、動的フィールドはなくなります。

if(!Page.IsPostBack) を削除すると、ページを収集して構築するプロセスの処理が重くなり、ページを再度レンダリングするのに時間がかかりすぎます。

アドバイスをいただければ幸いです。

ありがとう

4

2 に答える 2

1

ここで見つけたGridViewTemplate.csを変更して使用することで、列を動的に構築することになりました。

テキストボックスには列名(サイズオプションに基づく)に基づいて名前が付けられているため、サイズオプションをループし、FindControlを使用してテキストボックスとその値を取得できました。

protected void cmdSave_OnClick(object sender, EventArgs e)
{
    ArrayList itemsOrdered = new ArrayList();
    foreach (GridViewRow gvr in gvMainOrderForm.Rows)
    {
        Label lblItemId = (Label)(gvr.FindControl("lblItemId"));
        string itemId = lblItemId.Text;
        foreach (string availableOption in availableOptions)
        {
            TextBox tb = (TextBox)(gvr.FindControl("tb" + availableOption));
            if (tb != null && tb.Text != "")
            {
                ArrayList itemOrdered = new ArrayList();
                itemOrdered.Add(itemId);
                itemOrdered.Add(availableOption);
                itemOrdered.Add(tb.Text);
                itemsOrdered.Add(itemOrdered);
            }
        }
    }
}

値が空でない場合は、製品ID、サイズオプション、数量を含む小さな配列を作成しました。

これで、itemsOrderedを使用してショッピングカートを変更できるようになります。

于 2010-03-08T14:21:37.630 に答える
0

動的列をどのように構築しますか?rowdatabound、rowcreatedなどのイベントを処理していますか、それとも注入されたhtmlを次のようなものでレンダリングしていますか?

<asp:Gridview ...>
<Columns>
    <asp:TemplateField ...>    
        <ItemTemplate>   
           <%# GetDynamicHtml(Container.DataItem) %>
        </ItemTemplate>
    </asp:TemplateField
...

ajaxはオプションですか?

于 2010-03-07T23:51:59.997 に答える