Asp.Net MVC 2 - пример множественного поиска jqgrid - PullRequest
0 голосов
/ 03 февраля 2011

Я нахожусь в процессе реализации jqGrid с MVC 2 и структурой объекта.Я хотел бы воспользоваться его многочисленными функциями поиска в сочетании с поиском / сортировкой, а также взаимодействием CRUD.Сетка будет состоять из двух таблиц, поэтому функция поиска также должна иметь возможность поиска по соответствующей таблице.В настоящее время у меня есть разбиение на страницы / сортировка, а также на стороне клиента, возвращая все поисковые фильтры, необходимые на стороне контроллера.Я ищу пример того, как реализовать все различные операторы поиска в структуре сущностей, в то же время поддерживая поиск по страницам / сортировку и связанный поиск таблиц.

Мой текущий сценарий на стороне клиента:

$(document).ready(function () {
    $('#grid').jqGrid({
        colNames: ['TypeId', 'Type', 'CR Active', 'Category'],
        colModel: [
                    { name: 'TYPE_ID', index: 'TYPE_ID', hidden: true, search: false },
                    { name: 'TYPE', index: 'TYPE', sortable: true, hidden: false },
                    { name: 'CR_ACTIVE', index: 'CR_ACTIVE', align: 'right', sortable: true, hidden: false },
                    { name: 'description', index: 'description', align: 'right', sortable: true, hidden: false }
                    ],
        pager: jQuery('#pager'),
        sortname: 'TYPE',
        rowNum: 10,
        rowList: [10, 20, 50],
        sortorder: "asc",
        width: 600,
        height: 250,
        datatype: 'json',
        caption: 'Available Types',
        viewrecords: true,
        mtype: 'GET',
        jsonReader: {
            root: "rows",
            page: "page",
            total: "total",
            records: "records",
            repeatitems: false,
            userdata: "userdata"
        },
        url: "/Type/GetData"
    }).navGrid('#pager', { view: false, del: true, add: true, edit: true },
       {}, // default settings for edit
       {}, // default settings for add
       {}, // delete instead that del:false we need this
       {closeOnEscape: true, multipleSearch: true, closeAfterSearch: true }, // search options
       {} /* view parameters*/
     );

});

Мой контроллер:

public JsonResult GetData(GridSettings grid)
{
        using (IWE dataContext = new IWE())
        {
            var query = from host in dataContext.LKTYPE
                        select new
                        {
                            TYPE_ID = host.TYPE_ID,
                            TYPE = host.TYPE,
                            CR_ACTIVE = host.CR_ACTIVE,
                            description = host.VWEPICORCATEGORY.description
                        };


            ////sorting
            query = query.OrderBy(grid.SortColumn, grid.SortOrder);

            //count
            var count = query.Count();

            //paging
            var data = query.Skip((grid.PageIndex - 1) * grid.PageSize).Take(grid.PageSize).ToArray();

            //converting in grid format
            var result = new
            {
                total = (int)Math.Ceiling((double)count / grid.PageSize),
                page = grid.PageIndex,
                records = count,
                rows = data.ToArray()
            };

            return Json(result, JsonRequestBehavior.AllowGet);
        }

}

GridSettings определяется как:

[ModelBinder(typeof(GridModelBinder))]
public class GridSettings
{
    public bool IsSearch { get; set; }
    public int PageSize { get; set; }
    public int PageIndex { get; set; }
    public string SortColumn { get; set; }
    public string SortOrder { get; set; }

    public Filter Where { get; set; }
}

Так что с этимЯ получаю от клиента все свои статьи по поиску / сортировке и поиску.

Если у кого-нибудь есть хороший пример того, как этого добиться, я был бы признателен.Я прошел через пример проекта кода, но у него есть только пример из нескольких возможных операторов поиска, и когда вы открываете другие, разрывы запроса.Не говоря уже о том, что он не поддерживает поиск по таблице, связанной с сетками (http://www.codeproject.com/script/Articles/ArticleVersion.aspx?aid=58357&av=73016). На этом сайте есть хороший пример http://www.trirand.com/blog/jqgrid/jqgrid.html,, но на стороне сервера все сделано в PHP и MySQL. Iна данный момент не знаю много об этом, но локальный поиск также возможен, если он сделает то, что мне нужно.

Заранее спасибо, Билли

1 Ответ

0 голосов
/ 29 ноября 2012

Это должно помочь всем, кто ищет такую ​​же вещь: http://codefucius.blogspot.co.uk/2012/11/implementing-jqgrid-search.html

Я не уверен, что проблема с поиском по связанной таблице - конечно, это просто использование соединений запросов linq.

 var invoices = from i in db.Invoices
         join c in customer on c.Id = i.Id  // inner join related table
         join ljic in db.InvoiceCalcs 
         on i.Id equals ljic.Id into ljict // left join related table
         from ic in ljict.DefaultIfEmpty()  
         where (i.CustomerId == id && c.Name == "Jones")  // where clause (i.e. search phrase for 2 related tables)

Если проблема заключается в именах столбцов в динамическом linq, то префикс столбца с именем таблицы, т.е. Customer.Name == "Jones" и т. Д. Альтернативой является просто использование представления SQLприсоединиться к таблицам и запросить их, что также может повысить производительность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...