如何过滤DataList?

时间:2017-01-30 08:10:44

标签: c# asp.net

<asp:DataList runat="server" DataSourceID="SqlDataSource1" ID="orderdatalist">
        <ItemTemplate>
            <table>
                <td>
                    Order Number:
                    <br />
                    <asp:Label DataField="oID" Text='<%# Eval("oID") %>' ID="orderidlabel"></asp:Label>
                </td>                
                <td>
                    USER ID:
                    <br />
                    <asp:Label runat="server" DatField="oUser_ID" Text='<%# Eval("oUser_ID") %>'></asp:Label>
                </td>
                <td>
                    ORDER STATUS:
                    <br />
                    <asp:Label runat="server" DataField="oDelivery_Status" Text='<%# Eval("oDelivery_Status") %>'></asp:Label>
                </td>                 
            </table>
        </ItemTemplate>
    </asp:DataList>

以上是我的asp页面的代码。我有一个下拉列表,其中包含以下选项:“已取消”,“已发送”和“已下订单”。我在这里尝试做的是根据下拉列表值过滤数据列表。例如。如果单击“已取消”,则数据列表将仅显示oDelivery_Mode字段下已“已取消”的记录。尝试在线搜索,但大多数是gridview等的解决方案,没有一个是关于数据主义者。任何解决方案?

2 个答案:

答案 0 :(得分:0)

此问题并非特定于GridView或DataList。您需要做的就是设置SqlDataSource的某些属性。

您可以使用SqlDataSource的FilterParameters和FilterExpression属性。

<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnctionString="<<connectionstring>>" SelectCommand="<<selectcommand>>" FilterExpression="oDelivery_Status = {0}">
  <FilterParameters>
    <asp:ControlParameter Name="OrderStatus" ControlID="<<dropdownlistid>>" PropertyName="SelectedValue" />
  </FilterParameters>
 <asp:SqlDataSource> 

我不确定connectionstring,select命令和下拉列表的ID。所以我为它们放置了占位符,你需要在那里使用正确的值。

这可以解决您的问题。

答案 1 :(得分:0)

您需要使用FilterParameters。根据您的需要更改值。

<asp:DataList runat="server" DataSourceID="SqlDataSource1" ID="orderdatalist">
                <ItemTemplate>
                    <table>
                        <td><%# Eval("OrderID") %>
                        </td>
                        <td><%# Eval("OrderName") %> 
                        </td>
                        <td><%# Eval("OrderStatus") %> 
                        </td>
                    </table>
                </ItemTemplate>
            </asp:DataList>
            <asp:SqlDataSource
                ID="SqlDataSource1"
                EnableCaching="true"
                DataSourceMode="DataSet"
                runat="server"
                SelectCommand="select * from [Order]"
                ConnectionString="<%$ ConnectionStrings:DefaultConnection %>"
                FilterExpression="OrderStatus = '{0}'">
                <FilterParameters>
                    <asp:ControlParameter
                        Name="orderparam"
                        ControlID="ddlOrderStatus"
                        PropertyName="SelectedValue" />
                </FilterParameters>
            </asp:SqlDataSource>
            <asp:DropDownList ID="ddlOrderStatus" runat="server" OnSelectedIndexChanged="ddlOrderStatus_OnSelectedIndexChanged" AutoPostBack="true">
                <asp:ListItem Text="Cancelled" Value="Cancelled"></asp:ListItem>
                <asp:ListItem Text="Delivered" Value="Delivered"></asp:ListItem>
                <asp:ListItem Text="OrderPlaced" Value="OrderPlaced"></asp:ListItem>
            </asp:DropDownList>

protected void ddlOrderStatus_OnSelectedIndexChanged(object sender, EventArgs e)
{
   orderdatalist.DataBind();
}