powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Фильтры
22 сообщений из 22, страница 1 из 1
Фильтры
    #37950963
kim-kong
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Реально ли сделать фильтры в гриде (желательно в WebGrid) не прибегая к платным штукам типа Kendo UI и тп ?
Примеры приветствуются.
...
Рейтинг: 0 / 0
Фильтры
    #37956766
kim-kong
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Решил не парить мозг и сделать самые простые фильтры типа:

View:
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
@using (Html.BeginForm())
     {
     <fieldset>
          <legend>Search</legend>
  
          <div>
              Номер документа:
          </div>
          <div>
              <input type="text" id="DocumentNumber" name="DocumentNumber" />
          </div>
   
          <div>
              Дата регистрации документа:
          </div>
         <div>
              <input type="text" id="RegistrationDate" name="RegistrationDate" />
          </div>
          <p>
              <input type="submit" value="Search" />
          </p>
      </fieldset>
     }



Контроллер:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
       public ActionResult Index(string DocumentNumber, DateTime? RegistrationDate, string ContractorIN, string ContractSubject)
        {
            var contracts = (from contract in db.Contracts select contract).ToList();

            if (RegistrationDate.HasValue)
            contracts = (from contract in db.Contracts where contract.RegistrationDate == RegistrationDate select contract).ToList();

            if (!string.IsNullOrEmpty(DocumentNumber))
            contracts = (from contract in db.Contracts where contract.DocumentNumber == DocumentNumber select contract).ToList();

            return View(contracts.ToList());
        }



Но вот теперь у меня другая проблема. В БД есть таблица Contracts и Contractors, сввязь по id. На SQL написать это довольно просто, конструкция в C# мне совсем непонятна, просветите меня пожалуйста, что писать в контроллере ?
...
Рейтинг: 0 / 0
Фильтры
    #37957003
Primus inter pares
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Таблицы соединять примерно так:

Код: c#
1.
2.
3.
4.
5.
6.
7.
var twoTables = from table1 in db.table1 
                join table2 in db.table2 on table1.id equals table2.id 
                select new 
                { 
                    table1.column1, 
                    table2.column1 
                };
...
Рейтинг: 0 / 0
Фильтры
    #37957208
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kim-kongРешил не парить мозг и сделать самые простые фильтры типа:


Не нужно каждый раз ToList() делать.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
       public ActionResult Index(string DocumentNumber, DateTime? RegistrationDate)
        {
            var query = db.Contracts as IQueryable<contract>();

            if (RegistrationDate.HasValue)
                query = query.Where(t => t.RegistrationDate == RegistrationDate)

            if (!string.IsNullOrEmpty(DocumentNumber))
                query = query.Where(t => t.DocumentNumber == DocumentNumber)

            return View(query.ToList());
        }
...
Рейтинг: 0 / 0
Фильтры
    #37958654
kim-kong
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Primus inter pares,
Что такое column1 ?
...
Рейтинг: 0 / 0
Фильтры
    #37958743
Primus inter pares
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kim-kong, Названия столбцов в таблицах. В твоем случае насколько я понимаю DocumentNumber, RegistrationDate, Id например.
...
Рейтинг: 0 / 0
Фильтры
    #37959348
kim-kong
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Primus inter pares,

Есть способ обойти объединение таблиц и писать что то вроде:

public ActionResult Index(string DocumentNumber, DateTime? RegistrationDate, string Contractor, string ContractSubject)
{
var query = db.Contracts as IQueryable<Contracts>;

if (RegistrationDate.HasValue)
query = query.Where(t => t.RegistrationDate == RegistrationDate);

if (!string.IsNullOrEmpty(DocumentNumber))
query = query.Where(t => t.DocumentNumber == DocumentNumber);

if (!string.IsNullOrEmpty(Contractor))
query = query.Where(t => t.Сontractor.Name == Contractor);

return View(query.ToList());
}
...
Рейтинг: 0 / 0
Фильтры
    #37959511
kim-kong
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Primus inter pares,

И что делать, если мне вместо строгого равенства "==" нужно "like" ?
...
Рейтинг: 0 / 0
Фильтры
    #37959580
kim-kong
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kim-kong,

Разобрался, теперь все выглядит вот так

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
        public ActionResult Index(string DocumentNumber, DateTime? RegistrationDate, string ContractorName, string ContractSubjectName)
        {
            //var contracts = db.Contracts.Include(c => c.ContractSubjectName).Include(c => c.Currency).Include(c => c.LegalStatus).Include(c => c.LegalStatus1).Include(c => c.Сontractor).Include(c => c.Сontractor1);
            var contracts = (from contract in db.Contracts select contract).ToList();
            

            if (RegistrationDate.HasValue)
            contracts = (from contract in db.Contracts where contract.RegistrationDate == RegistrationDate select contract).ToList();

            if (!string.IsNullOrEmpty(DocumentNumber))
            contracts = (from contract in db.Contracts where contract.DocumentNumber == DocumentNumber select contract).ToList();

            if (!string.IsNullOrEmpty(ContractorName))
            contracts = (from contract in db.Contracts where contract.Сontractor.Name == ContractorName select contract).ToList();

            if (!string.IsNullOrEmpty(ContractSubjectName))
            contracts = (from contract in db.Contracts where contract.ContractSubject.Name == ContractSubjectName select contract).ToList();

            return View(contracts.ToList());
        }



Теперь нужно все эти IFы объединить логическим AND
...
Рейтинг: 0 / 0
Фильтры
    #37962038
kim-kong
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kim-kong,

Неохота кучу ifов делать, лучше сделать метод, записывающий в конец.
...
Рейтинг: 0 / 0
Фильтры
    #37962829
kim-kong
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kim-kong,

Кто - нибудь делал подобные фильтры ?
Мне бы пример не помешал, где все формы для поиска связаны логическим AND.
...
Рейтинг: 0 / 0
Фильтры
    #37962839
Deza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kim-kongРеально ли сделать фильтры в гриде (желательно в WebGrid) не прибегая к платным штукам типа Kendo UI и тп ?
Примеры приветствуются.

тыц
...
Рейтинг: 0 / 0
Фильтры
    #37963242
kim-kong
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Deza,

Я webgridом пользуюсь, в view нельзя присвоить таблице id="table1"
...
Рейтинг: 0 / 0
Фильтры
    #37963247
kim-kong
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Deza,

Вставил id вот так в вебгриде
Код: html
1.
2.
3.
4.
5.
6.
7.
            @{
        var grid = new WebGrid(Model, defaultSort: "DocumentNumber", canPage: true, ajaxUpdateContainerId: "SampleClassList");
        @grid.GetHtml(tableStyle: "webGrid",
        htmlAttributes: new { id = "table1" },
        headerStyle: "header", 
                //alternatingRowStyle: "alt",
        columns: grid.Columns(



подключил скрипты, никакой реакции.
...
Рейтинг: 0 / 0
Фильтры
    #37963679
Deza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kim-kong,
ни когда его не использовал, сегодня попробую изучить, если что то получится, покажу:)
...
Рейтинг: 0 / 0
Фильтры
    #37963732
Deza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kim-kongDeza,

Вставил id вот так в вебгриде
Код: html
1.
2.
3.
4.
5.
6.
7.
            @{
        var grid = new WebGrid(Model, defaultSort: "DocumentNumber", canPage: true, ajaxUpdateContainerId: "SampleClassList");
        @grid.GetHtml(tableStyle: "webGrid",
        htmlAttributes: new { id = "table1" },
        headerStyle: "header", 
                //alternatingRowStyle: "alt",
        columns: grid.Columns(



подключил скрипты, никакой реакции.

Контролер и модель

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
namespace webGrid.Controllers {
    public class HomeController : Controller {
        //
        // GET: /Home/

        public ActionResult Index() {
            var repo = new UserRepo();
            var model = new UserModel {
                                          Users = repo.GetUsers()
                                      };
            return View(model);
        }
    }

    public class UserModel {
        public IEnumerable<User> Users { get; set; } 
    }

    public class User {
        public string Name { get; set; }
        public string LastName { get; set; }
    }

    public class UserRepo {
        public IEnumerable<User> GetUsers() {
            return new List<User> {
                                      new User {
                                                   Name = "Evgeniy",
                                                   LastName = "petrov"
                                               },
                                      new User {
                                                   Name = "Alex",
                                                   LastName = "ivanov"
                                               }
                                  };
        }
    }
}



Вьюха

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
@model webGrid.Controllers.UserModel

<link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />
    <script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/filter.js")" type="text/javascript"> </script>
<script language="javascript" type="text/javascript">
    $(document).ready(function () {
        setFilterGrid("table1");
        
    });
    
</script> 
@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

@{

    ViewBag.Title = "Basic Web Grid";

}
 
<h2>Basic Web Grid</h2>
 
<div>
 
@{

    var grid = new WebGrid(Model.Users, defaultSort: "Name");
    
 
}
 
@grid.GetHtml(htmlAttributes: new { id = "table1" })
 
</div>
...
Рейтинг: 0 / 0
Фильтры
    #37963736
Deza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
результат

...
Рейтинг: 0 / 0
Фильтры
    #37963977
kim-kong
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Deza,

в архиве два файлика, которые я подключил.

Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
        <title>@ViewBag.Title</title>
        <link href="~/favicon.ico" rel="shortcut icon" type="image/x-icon" />
        <link href="~/Content/themes/base/jquery.ui.all.css" rel="stylesheet" />
        <script src="@Url.Content("~/Scripts/jquery-1.8.0.min.js")" type="text/javascript"></script>
        <script src="@Url.Content("~/Scripts/jquery-ui-1.8.23.custom.min.js")" type="text/javascript"></script>
        <script src="~/Content/jscripts/tablefilter.js"></script>

        <script>
            $(function () {
                $('input[name="RegistrationDate"]').datepicker();
            });
        </script>

        <script type="text/javascript">
            $(document).ready(function () {
                $(".date").datepicker();
            });
        </script>



        <script language="javascript" type="text/javascript">
            setFilterGrid("table1");
        </script>



Вот все подключенные скрипты

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
@{
        var grid = new WebGrid(Model, defaultSort: "DocumentNumber", canPage: true, ajaxUpdateContainerId: "SampleClassList");
        @grid.GetHtml(tableStyle: "webGrid",
        htmlAttributes: new { id = "table1" },
        headerStyle: "header", 
        alternatingRowStyle: "alt",
        columns: grid.Columns(
                    grid.Column(format: (item) => Html.ActionLink
                    ("Ред.", "Edit", new { id = item.ID })),
                    grid.Column(format: (item) => Html.ActionLink
                    ("Подробнее", "Details", new { id = item.ID })),
                    grid.Column(format: (item) => Html.ActionLink
                    ("Удалить", "Delete", new { id = item.ID })),
                    grid.Column("DocumentNumber", "Номер документа", canSort: true),



Вот мой грид
...
Рейтинг: 0 / 0
Фильтры
    #37964016
kim-kong
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Deza,

и еще ругается

Предупреждение 1 Проверка (HTML5): атрибут "language" не является допустимым атрибутом элемента "script".
...
Рейтинг: 0 / 0
Фильтры
    #37964044
kim-kong
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Deza,

Спасибо, уже не надо.
Сказали делать серверную фильтрацию, а не клиентскую.
...
Рейтинг: 0 / 0
Фильтры
    #37964081
kim-kong
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kim-kong,

Проблема остается прежней, я не могу понять как объединить вот эти фильтры логическим AND
+значения фильтров после обновления страницы должны сохраняться

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
        public ActionResult Index(string DocumentNumber, DateTime? RegistrationDate, string ContractorName, string ContractSubjectName)
        {
            var contracts = (from contract in db.Contracts select contract).ToList();
                
                if (RegistrationDate.HasValue)
                    contracts = (from contract in db.Contracts where contract.RegistrationDate == RegistrationDate select contract).ToList();

                if (!string.IsNullOrEmpty(DocumentNumber))
                    contracts = (from contract in db.Contracts where contract.DocumentNumber == DocumentNumber select contract).ToList();

                if (!string.IsNullOrEmpty(ContractorName))
                    contracts = (from contract in db.Contracts where contract.Сontractor.Name == ContractorName select contract).ToList();

                if (!string.IsNullOrEmpty(ContractSubjectName))
                    contracts = (from contract in db.Contracts where contract.ContractSubject.Name == ContractSubjectName select contract).ToList();
                
                return View(contracts.ToList());
        }
...
Рейтинг: 0 / 0
Фильтры
    #37964405
kim-kong
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Парамон,

У тебя, вроде, была правильная мысль. Сделать IQueryable<Contracts>, а потом делать выборку из Contracts, а не из db.Contracts.
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Фильтры
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]