0

私はこれでかなり長い間働いてきました。私は単にデータリストにあるものにアクセスしようとしています。PageLoad からアイテムをうまく取得でき、いくつかの動的アイテムを設定することもできます..しかし、ボタン クリック ハンドラーからコントロールにアクセスできません。次のような他のバリエーションを試しました

ListView1.FindControl("DropDownList1") as DropDownList;

これはNULLを返します。私はもう試した

<asp:LinkButton id="addPro" runat="server" CommandArgument='<%# DropDownList1.SelectedItem.Text %>' onCommand ="addPro_Click">Add To Cart</asp:LinkButton>

これは、スコープ内にデータ コントロールが見つからないことを示しています。

    <asp:ListView ID="ListView1" runat="server" 
        DataKeyNames="Expr7,Expr1,productNo" DataSourceID="SqlDataSource1">
        <AlternatingItemTemplate>
            <span style="">
            <asp:Label ID="productNameLabel" runat="server" 
                Text='<%# Eval("productName") %>' />
            <br />
            <asp:Image runat="server" height = "300" ImageUrl='<%# Eval("img") %>'></asp:Image>
            <br />
            Description:<br />
            <asp:Label ID="itemNotesLabel" runat="server" Text='<%# Eval("itemNotes") %>' />
            <br />

            stock:
            <asp:Label ID="stockLabel" runat="server" Text='<%# Eval("stock") %>' />
            <br />
            price:
            <asp:Label ID="priceLabel" runat="server" Text='<%# "$"+ Eval("price")+".00" %>' />
            <br />

            Quantitiy: <asp:DropDownList id="DropDownList1" runat="server"> </asp:DropDownList>            
            <br />

            <asp:LinkButton id="addPro" runat="server" CommandArgument='<%# Eval("productNo") %>' onCommand ="addPro_Click">Add To Cart</asp:LinkButton>
            <br /><br /><br />
<br /></span>
        </AlternatingItemTemplate>

クリック時

protected void addPro_Click(Object sender, CommandEventArgs e)
{
    string addr = "";
    string v = Request.QueryString["cat"];
    if (v != null)
    {
        v = "cat=" + v+"&";
    }
    else
    {
        v = "";
    }

    DropDownList stockDD = (DropDownList) FindControl("DropDownList1");
    if (stockDD != null)
        addr = "~/product.aspx/?" + v + "add=" + e.CommandArgument.ToString() + "&quant=" + stockDD.SelectedItem.Text;
    else
        addr = "ERROR!";
    Response.Redirect(addr+e.CommandArgument.ToString());        
    ListView1.ItemDataBound += (sa, ea) =>
        {
            DropDownList stockD = ea.Item.FindControl("DropDownList1") as DropDownList;
            Label l = ea.Item.FindControl("Lable12") as Label;
            l.Text = stockD.SelectedItem.Text;
            addr = "~/product.aspx/?" + v + "add=" + e.CommandArgument.ToString() + "&quant=" + stockD.SelectedItem;

        };
  // Response.Redirect(addr);
}

正しい方向への助けは、トンを助けるでしょう!ありがとう!

4

1 に答える 1

0

これを試して:

LinkButton lbSender = (LinkButton)sender;
ListViewDataItem lvItem = (ListViewDataItem)(lbSender.Parent);
DropDownList DropDownList1 = lvItem.FindControl("DropDownList1");

ListView.ItemsListViewDataItemはを継承する のコレクションでありListViewItem、 は から継承されControlます。Controlsこれは、を使用してコレクション内の任意のコントロールを見つけることができることを意味しますFindControl。階層を確認するだけです。

ドキュメントListView: http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listview.aspx

のドキュメントListViewDataItem: http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listviewdataitem.aspx

ドキュメントListViewItem: http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listviewitem.aspx

ドキュメントControl: http://msdn.microsoft.com/en-us/library/system.web.ui.control.aspx

于 2012-12-05T14:30:17.393 に答える