【问题标题】:Locating a control inside ListView template field在 ListView 模板字段中定位控件
【发布时间】:2015-04-18 14:32:07
【问题描述】:

我意识到这个问题之前可能已经被问过......但是我对此有一个特定的问题......

我的代码

foreach(ListViewItem item in listProducts.Items)
{
DropDownList dropList = listProducts.Items.FindControl("DropDownList1");
int SelectedID = Convert.ToInt32(listProducts.SelectedValue);
}
// now do something with that id...

问题是,一旦 foreach 循环通过 listview 项目,我就会从下拉列表中丢失所选项目的 ID...

我在 selectedindexchanged 下拉事件中使用此代码来定位所需的 ID,以便我可以根据用户从下拉列表中选择的内容向用户显示数据...

所以想法是当用户从下拉列表中选择某些东西时,我需要拿起所选项目的ID并在他选择时自动显示产品价格。

有人可以帮我解决这个问题吗?

列表视图:

 <asp:ListView ID="listProducts" runat="server" DataKeyNames="ProductID" OnItemDataBound="listProducts_ItemDataBound" OnItemCommand="listProducts_ItemCommand" OnSelectedIndexChanging="listProducts_SelectedIndexChanging">
                <ItemTemplate>
                     <div class="productoverlay">
                        <div class="col-lg-4 proizvod">
                             <div class="product">
                                 <div class="glow"></div>
                                 <img src='<%# "../productimg/" + Eval("FileName")%>'  alt='<%# Eval("ProductName") %>'/>
                            </div>
                        </div>
                         <div class="col-lg-1 price">
                             <asp:Label ID="lblPrice" runat="server" Text=""></asp:Label>
                         </div>
                         <div class="col-lg-7 pushtop">
                              <h1><%# Eval("ProductName") %></h1>

                             <p>Description: </p>
                             <p><%# Eval("ProductDescription") %></p>
                             <p>Quantity: </p><asp:TextBox ID="txtPackageQuantity" TextMode="Number" runat="server"></asp:TextBox>                        
                             <asp:DropDownList  ID="DropDownList1" runat="server" OnTextChanged="DropDownList1_TextChanged"></asp:DropDownList> 

                             <asp:Button ID="Button1" runat="server" Text="Add to cart"  CommandName="AddToCart" CommandArgument='<%# Eval("ProductID")%>'/>
                             </div>
                     </div>
                </ItemTemplate>
            </asp:ListView>     

【问题讨论】:

  • 这段代码是在 DropDownList1_TextChanged 事件处理程序中定义的吗?

标签: c# asp.net listview drop-down-menu selectedindexchanged


【解决方案1】:

这可能对你有用

protected void ListView1_SelectedIndexChanging(object sender, ListViewSelectEventArgs e)
        {
            var lw = sender as ListView;
            var ddl = lw.Items[e.NewSelectedIndex].FindControl("DropDownList1") as DropDownList;
            var val = ddl.SelectedValue;
        }

更新: dropwdownlists 上没有 OnTextChanged="DropDownList1_TextChanged" (如聊天中所述) 如果你不附加到 listview 事件而是附加到 dropwdonwlist 事件,你必须这样做:

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
        {
            var ddl = sender as DropDownList;
            var val = ddl.SelectedValue;
        }

【讨论】:

  • 当用户从列表视图的模板字段中的下拉列表中选择某些内容时,此事件不会触发,因此这根本没有帮助...我相信我需要选择下拉列表中的索引更改事件,但我似乎找不到它???仅“在选定的索引上更改”...
  • 这就是您要寻找的活动!那么您必须将 DropDownList1_SelectedIndexChanged 添加到下拉列表中,然后访问那里的值。
  • 你能把你认为应该是什么样子的代码写给我吗,因为我不太确定如何处理你上面给我的代码......谢谢!
  • 好吧,给我几分钟来获取代码...顺便说一句,每次用户更改下拉选择时都应该触发此事件?
  • 如果您希望在用户更改选择时触发 SelectedIndexChanged,则应在 DropDownList 中设置 AutoPostBack = "true"
【解决方案2】:

好的,这是列表视图:

<asp:ListView ID="listProducts" runat="server" DataKeyNames="ProductID" OnItemDataBound="listProducts_ItemDataBound" OnItemCommand="listProducts_ItemCommand" OnSelectedIndexChanging="listProducts_SelectedIndexChanging">
            <ItemTemplate>
                 <div class="productoverlay">
                    <div class="col-lg-4 proizvod">
                         <div class="product">
                             <div class="glow"></div>
                             <img src='<%# "../productimg/" + Eval("FileName")%>'  alt='<%# Eval("ProductName") %>'/>
                        </div>
                    </div>
                     <div class="col-lg-1 price">
                         <asp:Label ID="lblPrice" runat="server" Text=""></asp:Label>
                     </div>
                     <div class="col-lg-7 pushtop">
                          <h1><%# Eval("ProductName") %></h1>

                         <p>Description: </p>
                         <p><%# Eval("ProductDescription") %></p>
                         <p>Quantity: </p><asp:TextBox ID="txtPackageQuantity" TextMode="Number" runat="server"></asp:TextBox>                        
                         <asp:DropDownList  ID="DropDownList1" runat="server" OnTextChanged="DropDownList1_TextChanged"></asp:DropDownList> 

                         <asp:Button ID="Button1" runat="server" Text="Add to cart"  CommandName="AddToCart" CommandArgument='<%# Eval("ProductID")%>'/>
                         </div>
                 </div>
            </ItemTemplate>
        </asp:ListView>     

这是你需要的吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-17
    • 1970-01-01
    • 2011-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多