繁体   English   中英

带有下拉列表的过滤中继器(Asp.net/C#)

[英]Filter Repeater with Dropdown (Asp.net/C#)

我有一个连接到访问数据库的转发器。 中继器使用<%#Eval(“ text”)%>命令和AccessDataSource提取信息。

我能够很好地显示初始数据,但是我希望能够使用一系列下拉列表过滤记录。 例如,仅能够按“制造”,“年份”,“颜色”列出汽车。 我已经能够根据需要过滤数据,但这是通过在第二个转发器中显示它并使用另一个AccessDataSource来实现的。 理想情况下,我只想使用一个会相应更新的中继器。

有什么建议么? 谢谢。

<asp:AccessDataSource ID="AccessDataSource1" runat="server" 
DataFile="~/App_Data/Cars.accdb" 
SelectCommand="SELECT * FROM [Cars]">
</asp:AccessDataSource>


<asp:AccessDataSource ID="AccessDataSource2" runat="server"
    DataFile="~/App_Data/Cars.accdb" 
       SelectCommand="SELECT Make, [Year], Model, Colour, Artwork, Type, WHERE (Colour = ?)">
<SelectParameters>
    <asp:ControlParameter ControlID="ColourDropdown" Name="Colour" PropertyName="SelectedValue" Type="String" />
</SelectParameters>
</asp:AccessDataSource>




<asp:DropDownList ID="GenreDropdown" runat="server" 
     DataSourceID="AccessDataSource1" DataTextField="Colour" DataValueField="Colour"
     AppendDataBoundItems="True" CssClass="form-control"  DataMember="DefaultView"       AutoPostBack="True" >
<asp:ListItem Value="%"</asp:ListItem>
</asp:DropDownList>




<asp:Repeater ID="Repeater2" runat="server" DataSourceID="AccessDataSource1">
<ItemTemplate>
        <div class="row list-group-item active">
            <div class="col-xs-2">         
            <p class="list-group-item-text active"><img src="carimages/<%#Eval("Artwork")%>" /></div>
            <div class="col-xs-4">    
            <h4 class="list-group-item-heading"><%# Eval("Make")%> (<%# Eval("Year") %>)</h4>
            <p class="list-group-item-text"><%# Eval("Model")%></p>
            <p class="list-group-item-text"><%# Eval("Colour")%></p>
            <p class="list-group-item-text"><%# Eval("Type")%></p></div>
            <div class="col-xs-4"> 
            </div>
          </a>
            </div>
</ItemTemplate>
</asp:Repeater>   



<asp:Repeater ID="Repeater3" runat="server" DataSourceID="AccessDataSource2">
<ItemTemplate>
        <div class="row list-group-item active">
            <div class="col-xs-2">         
            <p class="list-group-item-text active"><img src="carimages/<%#Eval("Artwork")%>" /></div>
            <div class="col-xs-4">    
            <h4 class="list-group-item-heading"><%# Eval("Make")%> (<%# Eval("Year") %>)</h4>
            <p class="list-group-item-text"><%# Eval("Model")%></p>
            <p class="list-group-item-text"><%# Eval("Colour")%></p>
            <p class="list-group-item-text"><%# Eval("Type")%></p></div>
            <div class="col-xs-4"> 
            </div>
          </a>
            </div>
</ItemTemplate>
</asp:Repeater> 

您可以在每个下拉列表上绑定对函数的调用,该函数将在selectedindexchanged事件上检索数据并重新绑定数据重复器,这些东西的逻辑取决于最终目标

更新这是将其适应您的逻辑的示例

 Private Sub ddlsomethinhg_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ddlsomethinhg.SelectedIndexChanged
    //ASSUME INDEX 0 IS NOT VALID VALUE
    If ddlsomethinhg.SelectedIndex = 0 Then
        Exit Sub
    Else
        //ASSUME THAT IS INTEGER
        Dim SEARCHVALUE As Integer = CInt(ddlsomethinhg.SelectedValue)
        Dim QRY As String = String.Format("select * from TABLE where colname={0}", SEARCHVALUE)
        Using cnn As New OleDbConnection("CONNECTIONSTRING")
            If cnn.State = ConnectionState.Closed Then cnn.Open()
            Using CMD As New OleDbCommand(QRY, cnn)
                Using da As New OleDbDataAdapter(CMD)
                    Using ds As New DataSet
                        da.Fill(ds)
                        //if repeater2 is bounf in aspx page you will throw an exceptio so before you need to clean up datasource
                        Dim r As New Repeater
                        Repeater2.DataSourceID = ""
                        Repeater2.DataSource = ds.Tables(0)
                        Repeater2.DataBind()
                    End Using
                End Using
            End Using

        End Using
    End If
End Sub

为此,您需要动态地(在后面的代码中)向数据源添加参数,而不是装饰性地。 因此,在标记中,您应该保留此位置(猜测这是您的原始布局):

<asp:AccessDataSource ID="AccessDataSource1" runat="server" 
     DataFile="~/App_Data/Cars.accdb" 
     SelectCommand="SELECT * FROM [Cars]">
</asp:AccessDataSource>

<asp:DropDownList ID="GenreDropdown" runat="server" 
     DataSourceID="AccessDataSource1" DataTextField="Colour" DataValueField="Colour"
     AppendDataBoundItems="True" CssClass="form-control"  DataMember="DefaultView"       AutoPostBack="True" >
    <asp:ListItem Value="%"></asp:ListItem>
</asp:DropDownList>

<asp:Repeater ID="Repeater2" runat="server" DataSourceID="AccessDataSource1">
<ItemTemplate>
        <div class="row list-group-item active">
            <div class="col-xs-2">         
            <p class="list-group-item-text active"><img src="carimages/<%#Eval("Artwork")%>" /></div>
            <div class="col-xs-4">    
            <h4 class="list-group-item-heading"><%# Eval("Make")%> (<%# Eval("Year") %>)</h4>
            <p class="list-group-item-text"><%# Eval("Model")%></p>
            <p class="list-group-item-text"><%# Eval("Colour")%></p>
            <p class="list-group-item-text"><%# Eval("Type")%></p></div>
            <div class="col-xs-4"> 
            </div>
          </a>
            </div>
</ItemTemplate>
</asp:Repeater>

然后在后面的代码中,例如在页面加载时,执行以下操作:

AccessDataSource1.SelectParameters.Add("Colour", GenreDropdown.SelectedValue);
Repeater2.DataBind();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM