[英]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.