Добавление пользовательских фильтров для динамического веб-сайта данных (VS2010, EF4)

Попытка добавить некоторые различные фильтры (в дополнение к фильтру ForeignKey) к Динамическому Веб-сайту Данных в VS2010 с помощью EF4. Я могу добавить новые шаблоны Фильтра, но как я указываю, какой шаблон будет отображен для каждого свойства в моей модели?

Спасибо

5
задан Joel Coehoorn 12 April 2010 в 21:20
поделиться

1 ответ

Вот шаги, как это сделать:

1) Создайте новый UserControl для нужного фильтра в DynamicData \ Filters. Я создал TextFilter.ascx:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="TextFilter.ascx.cs" Inherits="Test.Prototype.Web.DynamicData.DynamicData.Filters.TextFilter" %>
<asp:TextBox runat="server" ID="TextBox1" AutoPostBack="true"  OnTextChanged="TextBox1_OnTextChanged" CssClass="DDFilter">
</asp:TextBox>

и код, стоящий за ним:

using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.Specialized;

using System.ComponentModel.DataAnnotations;
using System.Linq;

using System.Linq.Expressions;
using System.Web.DynamicData;
using System.Web.UI;
using System.Web.UI.WebControls;


namespace Test.Prototype.Web.DynamicData.DynamicData.Filters
{
    public partial class TextFilter : System.Web.DynamicData.QueryableFilterUserControl
    {

        private const string NullValueString = "[null]";

        protected void Page_Load(object sender, EventArgs e)
        {

        }

        public override Control FilterControl
        {
            get
            {
                return TextBox1;
            }
        }


        protected void TextBox1_OnTextChanged(object sender, EventArgs e)
        {
            OnFilterChanged();
        }

        public override IQueryable GetQueryable(IQueryable source)
        {
            string selectedValue = TextBox1.Text;
            if (String.IsNullOrEmpty(selectedValue))
            {
                return source;
            }

            object value = selectedValue;
            if (selectedValue == NullValueString)
            {
                value = null;
            }
            if (DefaultValues != null)
            {
                DefaultValues[Column.Name] = value;
            }

            return ApplyEqualityFilter(source, Column.Name, value);

        }

    }
}

Затем в вашей модели просто аннотируйте свои свойства атрибутом FilterUIHint, указывающим на следующий фильтр, и все готово:

using System; using System.Collections; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Collections.Specialized;

using System.ComponentModel.DataAnnotations;

пространство имен Test.Model { общедоступный актив частичного класса { #region Primitive Properties

    public virtual int Id
    {
        get;
        set;
    }

    [FilterUIHint("TextFilter")]
    public virtual string Name
    {
        get;
        set;
    }

...

9
ответ дан 14 December 2019 в 01:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: