【问题标题】:ASP.NET Dynamic Data: Display a dynamic list of filter criteria in a side barASP.NET 动态数据:在侧栏中显示筛选条件的动态列表
【发布时间】:2012-03-16 20:06:04
【问题描述】:

我有一组可供用户选择的类别。 每个类别都有一组不同的用户可能想要过滤的属性。

每个类别中的项目都显示在网格视图中。每个类别都有自己的网格视图网页。

当显示网格视图时,我想要一个侧边栏来显示与类别相关的属性。用户应该能够选择要过滤的属性。并按属性的最小/最大值过滤。

我正在尝试确定侧边栏中应包含哪些控件以及如何动态填充一组控件(假设每个控件都是不同的属性过滤器)。

例如查看Amazon books,侧边栏有一个动态生成的与书籍类别相关的过滤器列表。

其他不错的功能是:

  • 更改属性列表,以便仅显示将产生结果的属性/过滤器。

  • 让每个属性/过滤器显示选中后将显示的结果数。

【问题讨论】:

    标签: asp.net dynamic-data asp.net-dynamic-data


    【解决方案1】:

    我真的不知道您将如何加载 gridview,但这就是我能够做类似事情的方式。

    假设您通过 SQL 查询将数据发送到 GridView:

    select property1, property2, property3, ...., from categoryA
    

    侧视图中的任何内容都应该以某种方式考虑到您的 SQL 查询中,它们中的每一个都具有自动回发功能。

    <asp:TextBox runat="server" AutoPostBack="true" ID="Property1" /> 
    

    所以当它回发到服务器时,在你的页面加载方法中:

    protected void Page_Load(object sender, EventArgs e) 
    {
        if(IsPostBack)
        { 
            UpdateCategoryQuery();
        }
    }
    

    在你的 UpdateCategoryQuery() 方法上:

    private void UpdateCategoryQuery()
    {
        if(Property1.Text != "") 
        {
            string sql = "where property1 = '" + Property1.Text + "'";
        }
        //... and go on down the list.   
    }  
    

    最后,您需要读取此查询并使用 .DataSource 和 .DataBind() 将数据绑定到 GridView;

    这是一个非常简单的示例,但我并不确切知道您在寻找什么,所以我希望这对您有所帮助。

    编辑:这里的查询可能会变得相当复杂,具体取决于您必须过滤数据的属性数量,因此您可能需要花费一些时间来构建它以确保它正确运行。

    【讨论】:

    • 谢谢,我正在尝试确定侧边栏中应包含哪些控件,以及如何使用这些控件动态填充该侧边栏。
    • 正如 Icarus 的回答在下面所说,您必须自己构建。这实际上使您可以更好地控制过滤过程,即使它需要更多的工作。
    【解决方案2】:

    我是 ASP.NET 的新手,所以我一直在寻找要完成的控件 这个。

    没有任何开箱即用的控件可以实现这一点。你必须建立你自己的。

    这可能不是您想象的方式,但希望是您可以推断的一个想法:

    既然您知道要绑定到网格视图的对象类型,请创建一个下拉框,其中包含用户可以过滤的属性列表。在下拉列表旁边,放置一个min 和一个max 文本字段,以便用户可以在这些字段中输入他需要的任何值。像这样的:

    <asp:dropdownlist id="properties" runat="server">
     <ListItem Text="Color" Value="Color" />
     <ListItem Text="Size"  Value="Size"/>
     <ListItem Text="Price" Value="Price"/>
    </asp:dropdownlist>
    <asp:Textbox id="min" runat="server" />
    <asp:Textbox id="max" runat="server" />
    <asp:Button id="btnFilter" Click="Filter" Text="Filter" />
    
    protected void Filter(object sender, EventArgs e)
    {
       string minVal = min.Text;
       string maxVal = max.Text;
       string filterProperty = properties.SelectedValue;
    
       //Now filter your data using the property name and the min and max values
       //you can use Linq to do this quickly. 
       //If binding to a DataTable, use DataTable.Select method and rebind again
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-05
      • 2016-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-23
      相关资源
      最近更新 更多