1 基础
搜索和过滤功能,是使用确定的条件,查找匹配行数据。jqGrid提供几种搜索模式:
- Search Dialog 单搜索选项
- Search Dialog 多搜索选项
- ToolBar Searching 使用toobar的过滤
默认地,过滤会自动执行。每个 grid column 都有一个叫做 Searchable 的属性,默认为 true。如果设为 false,column 不会显示在 search dialog 和/或 toolbar。可以使用 ToolBarSetting.ShowSearchToolBar 和 ToolBarSetting.ShowSearchButton 属性控制显示搜索选项。
搜索属性和其关联选项,能在 Model 和 Controller 中设置。Controller会覆盖 Model 。
MODEL中:
1
using
System;
2
using
System.Collections.Generic;
3
using
System.Linq;
4
using
System.Web;
5
using
Trirand.Web.Mvc;
6
using
System.Web.UI.WebControls;
7
8
namespace
JQGridMVCExamples.Models
9
{
10
public
class
OrdersJqGridModel
11
{
12
public
OrdersJqGridModel()
13
{
14
OrdersGrid
=
new
JQGrid
15
{
16
Columns
=
new
List
<
JQGridColumn
>
()
17
{
18
new
JQGridColumn { DataField
=
"
OrderID
"
,
19
Width
=
50
},
20
new
JQGridColumn { DataField
=
"
OrderDate
"
,
21
Width
=
100
,
22
DataFormatString
=
"
{0:d}
"
},
23
new
JQGridColumn { DataField
=
"
CustomerID
"
,
24
Width
=
100
},
25
new
JQGridColumn { DataField
=
"
Freight
"
,
26
Width
=
75
},
27
new
JQGridColumn { DataField
=
"
ShipName
"
}
28
},
29
Width
=
Unit.Pixel(
640
)
30
};
31
32
OrdersGrid.ToolBarSettings.ShowRefreshButton
=
true
;
33
}
34
35
public
JQGrid OrdersGrid {
get
;
set
; }
36
}
37
}
CONTROLLER中
1
private
void
SetUpSearchDialogGrid(JQGrid ordersGrid)
2
{
3
//
show the search toolbar
4
ordersGrid.ToolBarSettings.ShowSearchButton
=
true
;
5
ordersGrid.Columns.Find(c
=>
c.DataField
==
"
OrderID
"
).Searchable
=
false
;
6
ordersGrid.Columns.Find(c
=>
c.DataField
==
"
OrderDate
"
).Searchable
=
false
;
7
8
JQGridColumn customersColumn
=
ordersGrid.Columns.Find(c
=>
c.DataField
==
"
CustomerID
"
);
9
customersColumn.Searchable
=
true
;
10
customersColumn.DataType
=
typeof
(
string
);
11
12
JQGridColumn freightColumn
=
ordersGrid.Columns.Find(c
=>
c.DataField
==
"
Freight
"
);
13
freightColumn.Searchable
=
true
;
14
freightColumn.DataType
=
typeof
(
decimal
);
15
16
JQGridColumn shipNameColumns
=
ordersGrid.Columns.Find(c
=>
c.DataField
==
"
ShipName
"
);
17
shipNameColumns.Searchable
=
true
;
18
shipNameColumns.DataType
=
typeof
(
string
);
19
}
- 在 Controller 中,我们定义了 SetUpSearchDialogGrid 方法,来设置要搜索的 columns。
- controller 会覆盖 Model 中的设置
- 我们通过使用 ordersGrid.ToolBarSetting.ShowSearchButton=true,来设置ToolBar 的模式
- 一些 columns 能搜索,一些不能
- 你需要定义 columns 的数据类型属性
需要在 默认 action 和 data requested action 中调用设置方法。
1
public
ActionResult SearchDialog()
2
{
3
//
Get the model (setup) of the grid defined in the /Models folder.
4
var gridModel
=
new
OrdersJqGridModel();
5
var ordersGrid
=
gridModel.OrdersGrid;
6
7
//
Customize/change some of the default settings for this model
8
//
ID is a mandatory field. Must by unique if you have several grids on one page.
9
ordersGrid.ID
=
"
OrdersGrid
"
;
10
//
Setting the DataUrl to an action (method) in the controller is required.
11
//
This action will return the data needed by the grid
12
ordersGrid.DataUrl
=
Url.Action(
"
SearchDialog_DataRequested
"
);
13
14
//
customize the default Orders grid model with custom settings
15
//
NOTE: you need to call this method in the action that fetches the data as well,
16
//
so that the models match
17
SetUpSearchDialogGrid(ordersGrid);
18
19
//
Pass the custmomized grid model to the View
20
return
View(gridModel);
21
}
22
23
//
This method is called when the grid requests data
24
public
JsonResult SearchDialog_DataRequested()
25
{
26
//
Get both the grid Model and the data Model
27
//
The data model in our case is an autogenerated linq2sql database based on Northwind.
28
var gridModel
=
new
OrdersJqGridModel();
29
var northWindModel
=
new
NorthwindDataContext();
30
31
//
customize the default Orders grid model with our custom settings
32
SetUpSearchDialogGrid(gridModel.OrdersGrid);
33
34
//
return the result of the DataBind method, passing the datasource as a parameter
35
//
jqGrid for ASP.NET MVC automatically takes care of paging, sorting, filtering/searching, etc
36
return
gridModel.OrdersGrid.DataBind(northWindModel.OrdersLarges);
37
}
2 单搜索选项的 Search Dialog
通过设置 ToolBarSetting.ShowSearchButton 为 True,会启用 搜索对话框按钮。
1
private
void
SetUpSearchDialogGrid(JQGrid ordersGrid)
2
{
3
//
show the search toolbar
4
ordersGrid.ToolBarSettings.ShowSearchButton
=
true
;
5
ordersGrid.Columns.Find(c
=>
c.DataField
==
"
OrderID
"
).Searchable
=
false
;
6
ordersGrid.Columns.Find(c
=>
c.DataField
==
"
OrderDate
"
).Searchable
=
false
;
7
8
JQGridColumn customersColumn
=
ordersGrid.Columns.Find(c
=>
c.DataField
==
"
CustomerID
"
);
9
customersColumn.Searchable
=
true
;
10
customersColumn.DataType
=
typeof
(
string
);
11
12
JQGridColumn freightColumn
=
ordersGrid.Columns.Find(c
=>
c.DataField
==
"
Freight
"
);
13
freightColumn.Searchable
=
true
;
14
freightColumn.DataType
=
typeof
(
decimal
);
15
16
JQGridColumn shipNameColumns
=
ordersGrid.Columns.Find(c
=>
c.DataField
==
"
ShipName
"
);
17
shipNameColumns.Searchable
=
true
;
18
shipNameColumns.DataType
=
typeof
(
string
);
19
}
3 多搜索项的 Search Dialog
1
private
void
SetUpSearchDialogGrid(JQGrid ordersGrid)
2
{
3
//
show the search toolbar
4
ordersGrid.ToolBarSettings.ShowSearchButton
=
true
;
5
ordersGrid.SearchDialogSettings.MultipleSearch
=
true
;
6
ordersGrid.Columns.Find(c
=>
c.DataField
==
"
OrderID
"
).Searchable
=
false
;
7
ordersGrid.Columns.Find(c
=>
c.DataField
==
"
OrderDate
"
).Searchable
=
false
;
8
9
JQGridColumn customersColumn
=
ordersGrid.Columns.Find(c
=>
c.DataField
==
"
CustomerID
"
);
10
customersColumn.Searchable
=
true
;
11
customersColumn.DataType
=
typeof
(
string
);
12
13
JQGridColumn freightColumn
=
ordersGrid.Columns.Find(c
=>
c.DataField
==
"
Freight
"
);
14
freightColumn.Searchable
=
true
;
15
freightColumn.DataType
=
typeof
(
decimal
);
16
17
JQGridColumn shipNameColumns
=
ordersGrid.Columns.Find(c
=>
c.DataField
==
"
ShipName
"
);
18
shipNameColumns.Searchable
=
true
;
19
shipNameColumns.DataType
=
typeof
(
string
);
20
}
4 Search ToolBar
搜索工具条功能,是用来在 grid 的顶部 直接显示过滤。设置 ToolBarSetting.ShowSearchToolBar 为 true 启用。
当一个 column 可搜索,你可以选择最终用户怎样编辑它。这是通过 Column.SearchType的属性 和两个不同的选项控制的——TextBox 和 DropDown。
另外,你可以指定最终用户看到的值:Columns 的 EditValues 属性的 name pairs,这对DropDown 很有用。
1
private
void
SetUpGrid(JQGrid ordersGrid)
2
{
3
//
show the search toolbar
4
ordersGrid.ToolBarSettings.ShowSearchToolBar
=
true
;
5
ordersGrid.Columns.Find(c
=>
c.DataField
==
"
OrderID
"
).Searchable
=
false
;
6
ordersGrid.Columns.Find(c
=>
c.DataField
==
"
OrderDate
"
).Searchable
=
false
;
7
8
SetUpCustomerIDSearchDropDown(ordersGrid);
9
SetUpFreightSearchDropDown(ordersGrid);
10
SetShipNameSearchDropDown(ordersGrid);
11
}
12
13
private
void
SetUpCustomerIDSearchDropDown(JQGrid ordersGrid)
14
{
15
//
setup the grid search criteria for the columns
16
JQGridColumn customersColumn
=
ordersGrid.Columns.Find(c
=>
c.DataField
==
"
CustomerID
"
);
17
customersColumn.Searchable
=
true
;
18
19
//
DataType must be set in order to use searching
20
customersColumn.DataType
=
typeof
(
string
);
21
customersColumn.SearchToolBarOperation
=
SearchOperation.IsEqualTo;
22
customersColumn.SearchType
=
SearchType.DropDown;
23
24
//
Populate the search dropdown only on initial request, in order to optimize performance
25
if
(ordersGrid.AjaxCallBackMode
==
AjaxCallBackMode.RequestData)
26
{
27
var northWindModel
=
new
NorthwindDataContext();
28
var searchList
=
from customers
in
northWindModel.Customers
29
select
new
SelectListItem
30
{
31
Text
=
customers.CustomerID,
32
Value
=
customers.CustomerID
33
};
34
35
customersColumn.SearchList
=
searchList.ToList
<
SelectListItem
>
();
36
customersColumn.SearchList.Insert(
0
,
new
SelectListItem { Text
=
"
All
"
, Value
=
""
});
37
}
38
}
39
40
private
void
SetUpFreightSearchDropDown(JQGrid ordersGrid)
41
{
42
//
setup the grid search criteria for the columns
43
JQGridColumn freightColumn
=
ordersGrid.Columns.Find(c
=>
c.DataField
==
"
Freight
"
);
44
freightColumn.Searchable
=
true
;
45
46
//
DataType must be set in order to use searching
47
freightColumn.DataType
=
typeof
(
decimal
);
48
freightColumn.SearchToolBarOperation
=
SearchOperation.IsGreaterOrEqualTo;
49
freightColumn.SearchType
=
SearchType.DropDown;
50
51
//
Populate the search dropdown only on initial request, in order to optimize performance
52
if
(ordersGrid.AjaxCallBackMode
==
AjaxCallBackMode.RequestData)
53
{
54
List
<
SelectListItem
>
searchList
=
new
List
<
SelectListItem
>
();
55
searchList.Add(
new
SelectListItem { Text
=
"
> 10
"
, Value
=
"
10
"
});
56
searchList.Add(
new
SelectListItem { Text
=
"
> 30
"
, Value
=
"
30
"
});
57
searchList.Add(
new
SelectListItem { Text
=
"
> 50
"
, Value
=
"
50
"
});
58
searchList.Add(
new
SelectListItem { Text
=
"
> 100
"
, Value
=
"
100
"
});
59
60
freightColumn.SearchList
=
searchList.ToList
<
SelectListItem
>
();
61
freightColumn.SearchList.Insert(
0
,
new
SelectListItem { Text
=
"
All
"
, Value
=
""
});
62
}
63
}
64
65
private
void
SetShipNameSearchDropDown(JQGrid ordersGrid)
66
{
67
JQGridColumn freightColumn
=
ordersGrid.Columns.Find(c
=>
c.DataField
==
"
ShipName
"
);
68
freightColumn.Searchable
=
true
;
69
freightColumn.DataType
=
typeof
(
string
);
70
freightColumn.SearchToolBarOperation
=
SearchOperation.Contains;
71
freightColumn.SearchType
=
SearchType.TextBox;
72
}