Asp.net 创建一个下拉列表,过滤中继器的输出

Asp.net 创建一个下拉列表,过滤中继器的输出,asp.net,Asp.net,我有一个转发器,它列出了我产品表中的所有产品,我需要一个下拉框来按类别id过滤转发器内容。我完全不知道我在做什么。这是我的中继器: <asp:Repeater ID="RShopItems" runat="server" ItemType="WebDevAssessment.Models.Product"> <ItemTemplate> <div class="col-md

我有一个转发器,它列出了我产品表中的所有产品,我需要一个下拉框来按类别id过滤转发器内容。我完全不知道我在做什么。这是我的中继器:

<asp:Repeater ID="RShopItems" runat="server" ItemType="WebDevAssessment.Models.Product">
    <ItemTemplate>
        <div class="col-md-4 productOuterContainer">
            <div class="col-md-10 col-md-offset-1 productInnerContainer border">
                <a href='<%#"ProductDetails.aspx?item=" + Item.product_id %>' runat="server" target="_parent">
                    <img runat="server" alt='<%# Item.product_name %>' src='<%# Item.product_image1 %>'
                                    style="width: 100%" class="img-thumbnail" />
                </a>

                <h4 class="text-center"><%# Item.product_name %></h4>
                <p class="text-center">Size: <%#Item.product_size%> - $<%#Item.product_price%></p>
                <p class="features_text text-center"><%#Item.product_feat_short%></p>
            </div>
        </div>
    </ItemTemplate>
</asp:Repeater>

好的,你可以用这个方法

在本例中,我们有一个中继器-显示酒店名称

我们有一个按城市筛选的下拉列表(无选择=所有城市)

因此,加价如下所示:

    <asp:DropDownList ID="DropDownList1" runat="server" DataTextField="City" DataValueField="ID" AutoPostBack="True">
    </asp:DropDownList>
    <br />
    <br />
   <asp:Repeater ID="Repeater1" runat="server">
    <ItemTemplate>
    <div style="border-style:solid;color:black;width:250px;float:left">
    <div style="padding:5px;text-align:right">

        Hotel Name: <asp:TextBox ID="txtHotelName" runat="server" Text ='<%# Eval("HotelName") %>' Width="130px" />
        <br />
        First Name: <asp:TextBox ID="txtFirst" runat="server" Text ='<%# Eval("FirstName") %>'  Width="130px" />
        <br />
        Last Name: <asp:TextBox ID="txtLast" runat="server" Text ='<%# Eval("LastName") %>'  Width="130px" />
        <br />
        City: <asp:TextBox ID="txtCity" runat="server" Text ='<%# Eval("City") %>'  Width="130px" />
        <br />
     </div>
    </div>
    </ItemTemplate>
  </asp:Repeater>
protected void Page_Load(object sender, System.EventArgs e)
{
    if (IsPostBack == false)
    {
        LoadDropDown();
        LoadGrid();
    }
}

public void LoadDropDown()
{

    // load drop down list
    using (SqlCommand cmdSQL = new SqlCommand("SELECT ID, City from tblCity ORDER BY City", 
            new SqlConnection(My.Settings.TEST3)))
    {
        cmdSQL.Connection.Open();
        DropDownList1.DataSource = cmdSQL.ExecuteReader;
        DropDownList1.DataBind();
        // add blank row choice to drop down list
        DropDownList1.Items.Insert(0, new ListItem(string.Empty, string.Empty));
    }
}

public void LoadGrid(string sFilter = "")
{
    using (SqlCommand cmdSQL = new SqlCommand("SELECT * FROM tblHotels", 
                  new SqlConnection(My.Settings.TEST3)))
    {
        if (sFilter != "")
        {
            cmdSQL.CommandText += " WHERE City = @City";
            cmdSQL.Parameters.Add("@City", SqlDbType.NVarChar).Value = DropDownList1.SelectedItem.Text;
        }

        cmdSQL.CommandText += " ORDER BY HotelName";
        cmdSQL.Connection.Open();
        Repeater1.DataSource = cmdSQL.ExecuteReader;
        Repeater1.DataBind();
    }
}

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
    LoadGrid(DropDownList1.SelectedItem.Text);
}
现在看起来是这样的:

    <asp:DropDownList ID="DropDownList1" runat="server" DataTextField="City" DataValueField="ID" AutoPostBack="True">
    </asp:DropDownList>
    <br />
    <br />
   <asp:Repeater ID="Repeater1" runat="server">
    <ItemTemplate>
    <div style="border-style:solid;color:black;width:250px;float:left">
    <div style="padding:5px;text-align:right">

        Hotel Name: <asp:TextBox ID="txtHotelName" runat="server" Text ='<%# Eval("HotelName") %>' Width="130px" />
        <br />
        First Name: <asp:TextBox ID="txtFirst" runat="server" Text ='<%# Eval("FirstName") %>'  Width="130px" />
        <br />
        Last Name: <asp:TextBox ID="txtLast" runat="server" Text ='<%# Eval("LastName") %>'  Width="130px" />
        <br />
        City: <asp:TextBox ID="txtCity" runat="server" Text ='<%# Eval("City") %>'  Width="130px" />
        <br />
     </div>
    </div>
    </ItemTemplate>
  </asp:Repeater>
protected void Page_Load(object sender, System.EventArgs e)
{
    if (IsPostBack == false)
    {
        LoadDropDown();
        LoadGrid();
    }
}

public void LoadDropDown()
{

    // load drop down list
    using (SqlCommand cmdSQL = new SqlCommand("SELECT ID, City from tblCity ORDER BY City", 
            new SqlConnection(My.Settings.TEST3)))
    {
        cmdSQL.Connection.Open();
        DropDownList1.DataSource = cmdSQL.ExecuteReader;
        DropDownList1.DataBind();
        // add blank row choice to drop down list
        DropDownList1.Items.Insert(0, new ListItem(string.Empty, string.Empty));
    }
}

public void LoadGrid(string sFilter = "")
{
    using (SqlCommand cmdSQL = new SqlCommand("SELECT * FROM tblHotels", 
                  new SqlConnection(My.Settings.TEST3)))
    {
        if (sFilter != "")
        {
            cmdSQL.CommandText += " WHERE City = @City";
            cmdSQL.Parameters.Add("@City", SqlDbType.NVarChar).Value = DropDownList1.SelectedItem.Text;
        }

        cmdSQL.CommandText += " ORDER BY HotelName";
        cmdSQL.Connection.Open();
        Repeater1.DataSource = cmdSQL.ExecuteReader;
        Repeater1.DataBind();
    }
}

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
    LoadGrid(DropDownList1.SelectedItem.Text);
}

因此,在第一次加载时,您加载下拉列表和中继器

下拉列表的auto post back=true,它只是通过向中继器的数据源应用参数(可选)来过滤中继器

它没有太多的代码,我也不认为像您这样使用linq有什么好处