2012-03-16 4 views
1

У меня есть набор категорий, которые пользователь может выбрать. Каждая категория имеет другой набор свойств, которые пользователь может захотеть фильтровать.Динамические данные ASP.NET: отображение динамического списка критериев фильтра в боковой панели

Элементы каждой категории отображаются в виде сетки. Каждая категория имеет свою собственную веб-страницу для представления сетки.

Когда отображается представление сетки, мне нужно, чтобы боковая панель отображала свойства, относящиеся к категории. Пользователь должен иметь возможность выбирать свойство для фильтрации. И фильтруйте значения min/max в свойстве.

Я пытаюсь определить, какие элементы управления должны размещаться на боковой панели, а также динамически заполнять набор элементов управления (если каждый из них является отдельным фильтром свойств).

Например, если посмотреть на Amazon books, на боковой панели есть динамически сгенерированный список фильтров, относящихся к категории книг.

Другие полезные свойства будут:

  • Изменить список свойств, так что будут отображаться только свойства/фильтры, которые производят результат.

  • Имейте каждое свойство/фильтр, показывающее количество результатов, которые будут отображаться, если они выбраны.

ответ

3

Я действительно не знаю, как вы собираетесь загружать gridview, но так я смог сделать что-то подобное.

Допустим, вы получаете ваши данные в GridView с помощью SQL запроса:

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

Что бы ни было на вид сбоку следует учитывать в ваш запрос каким-то образом, каждый из них с автоматическим пост обратно.

<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. 
} 

Наконец, вы хотите прочитайте этот запрос и привяжите данные к GridView, используя .DataSource и .DataBind();

Это очень простой пример, но я точно не знал, что именно вы искали, поэтому я надеюсь, что это поможет вам.

Редактировать: запрос здесь может быть довольно сложным в зависимости от того, сколько свойств вы должны фильтровать данные, поэтому вам придется потратить некоторое время на его создание, чтобы убедиться, что он работает правильно.

+0

Спасибо, я пытаюсь определить, какие элементы управления должны находиться на боковой панели, а также как я могу динамически заполнять эту панель с этими элементами управления. – Zaphod

+0

Как сказал ниже ответ Икара, вам придется строить свои собственные. Это фактически позволяет вам больше контролировать процесс фильтрации, даже если это немного больше. – Gobbledigook

0

Я новичок в ASP.NET, поэтому я застрял в поиске элементов управления, чтобы выполнить .

У вас нет элементов управления, которые могут быть выполнены. Вы должны строить свои собственные.

Это может не так, как вы видите, но, надеюсь, это идея, что вы можете экстраполировать:

Так как вы знаете тип объектов, являются обязательными к GridView, создать выпадающее окно со списком свойств в пользователь может фильтровать. Рядом с раскрывающимся списком разместите текстовое поле 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 

}