本文将介绍ExtJs的.NET控件YuiGrid分页机制和在线编辑功能.
一、分页
YuiGrid的分页机制不是很强大,内置有两种分页样式,下图便是其中的一种.
本示例代码是借鉴于YuiGrid源代码中的测试案例的代码,使用MSSQL2005数据库,下面为分页查询的代码:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->1
publicstaticDataTableGetPagedMovies(stringsort,intoffset,intpage_size,stringdir)
2

{
3
SqlConnectioncon=newSqlConnection();
4
con.ConnectionString=ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
5
con.Open();
6
7
8
offset=offset/page_size;
9
10
offset+=1;
11
//querythatgetsonlytherecordsneededtothepage
12
//usingthenewROW_NUMBERfunctioninsql2005
13
stringsql="WITHMOVIESAS("+
14
"SELECTROW_NUMBER()OVER"+
15
"(ORDERBY"+sort+""+dir+")ASRow,"+
16
"ID_MOVIE,TITLE,RATING,VOTES,YEAR,GENRE"+
17
"FROMTB_MOVIE)"+
18
"SELECTID_MOVIE,TITLE,GENRE,RATING,VOTES,YEAR"+
19
"FROMMOVIES"+
20
"WHERERowbetween(@PageIndex-1)*@[email protected]*@PageSize";
21
22
SqlCommandcmd=newSqlCommand(sql,con);
23
//addtheparameterstothequerytograbthecorrectpage
24
cmd.Parameters.AddWithValue("@PageIndex",offset);
25
cmd.Parameters.AddWithValue("@PageSize",page_size);
26
SqlDataAdapteradapt=newSqlDataAdapter(cmd);
27
DataSetds=newDataSet();
28
adapt.Fill(ds);
29
//closestheobjectsanddisposes
30
31
//GetMovieCount(ds);
32
con.Close();
33
cmd.Dispose();
34
con.Dispose();
35
returnds.Tables[0];
36
}
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
代码实现上很简单,有了上面的分页查询,下面只需要在Page_load里将数据进行绑定就OK了.
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->1protectedvoidPage_Load(objectsender,EventArgse)
2{
3if(!IsPostBack)
4{
5intpage_size=10;//defaultpagesize
6intoffset=1;//defaultpage
7stringsortCol,sortDir;
8if(string.IsNullOrEmpty(Request["sort"]))
9{
10sortCol="ID_MOVIE";
11sortDir="ASC";
12}
13else
14{
15sortCol=Request["sort"];
16sortDir=Request["dir"];
17}
18if(!string.IsNullOrEmpty(Request["limit"]))
19{
20page_size=int.Parse(Request["limit"]);
21offset=int.Parse(Request["start"]);
22}
23
24
25YuiGrid1.TotalRecords=Movie.GetMovieCount();
26YuiGrid1.DataSource=Movie.GetPagedMovies(sortCol,offset,page_size,sortDir);
27YuiGrid1.DataBind();
28}
29}
2{
3if(!IsPostBack)
4{
5intpage_size=10;//defaultpagesize
6intoffset=1;//defaultpage
7stringsortCol,sortDir;
8if(string.IsNullOrEmpty(Request["sort"]))
9{
10sortCol="ID_MOVIE";
11sortDir="ASC";
12}
13else
14{
15sortCol=Request["sort"];
16sortDir=Request["dir"];
17}
18if(!string.IsNullOrEmpty(Request["limit"]))
19{
20page_size=int.Parse(Request["limit"]);
21offset=int.Parse(Request["start"]);
22}
23
24
25YuiGrid1.TotalRecords=Movie.GetMovieCount();
26YuiGrid1.DataSource=Movie.GetPagedMovies(sortCol,offset,page_size,sortDir);
27YuiGrid1.DataBind();
28}
29}
二、在线编辑
在实现YuiGrid的在线编辑,首先需将其EnableEdit属性设为True,然后通过CellEdited事件来做数据库更新操 作。其实更新数据库无非就是将当前行的数据取出来,然后执行一条相应的SQL就OK,这里的重点应该是取数据,在标准GridView里通常都是通过命令 参数来搞定的,YuiGrid不同的是通过他自己的事件传递的对象属性来获取,如下:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->1
protectedvoidYuiGrid1_CellEdited(objectsender,ExtExtenders.GridCellEditedArgse)
2

{
3
SqlConnectioncon=newSqlConnection();
4
con.ConnectionString=System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;//ConnectionString
5
con.Open();
6
SqlCommandcmd=newSqlCommand();
7
cmd.Connection=con;
8
stringsql="UPDATETB_MOVIESET"+e.Field+"[email protected]"+e.Field+
9
"[email protected]_MOVIE";
10
11
cmd.CommandText=sql;
12
cmd.Parameters.AddWithValue("@"+e.Field,e.Value);
13
cmd.Parameters.AddWithValue("@ID_MOVIE",e.Record["ID_MOVIE"]);
14
try
15

{
16
cmd.ExecuteNonQuery();
17
}
18
catch(Exceptionex)
19

{
20
System.Diagnostics.Debug.WriteLine(ex.Message);
21
}
22
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
大致如下图:
YuiGrid里可以非常方便的嵌入ListBox或DropDownList等控件,只需要在外部任意定义一个 DropDownList控件,然后将YuiGrid对应列的EditControlId属性设置为该控件ID就OK了。如下代码遍上上图的完整定义:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->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
关于ExtJS的.NET控件YuiGrid的分页和在线编辑就介绍这些,详细大家可以访问http://extendersamples.rodiniz.com或下载下面提供的示例代码了解更多。