Динамические данные ASP.NET: отображение динамического списка критериев фильтра на боковой панели. - PullRequest
1 голос
/ 17 марта 2012

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

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

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

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

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

Другие полезные функции:

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

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

Ответы [ 2 ]

3 голосов
/ 17 марта 2012

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

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

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

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

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

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

0 голосов
/ 17 марта 2012

Я новичок в 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

}
...