本文将介绍ExtJs的.NET控件YuiGrid分页机制和在线编辑功能.

一、分页

YuiGrid的分页机制不是很强大,内置有两种分页样式,下图便是其中的一种.

ExtJs的.NET控件----YuiGrid(分页/在线编辑)

本示例代码是借鉴于YuiGrid源代码中的测试案例的代码,使用MSSQL2005数据库,下面为分页查询的代码:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->1ExtJs的.NET控件----YuiGrid(分页/在线编辑)publicstaticDataTableGetPagedMovies(stringsort,intoffset,intpage_size,stringdir)
2ExtJs的.NET控件----YuiGrid(分页/在线编辑)ExtJs的.NET控件----YuiGrid(分页/在线编辑)ExtJs的.NET控件----YuiGrid(分页/在线编辑){
3ExtJs的.NET控件----YuiGrid(分页/在线编辑)SqlConnectioncon=newSqlConnection();
4ExtJs的.NET控件----YuiGrid(分页/在线编辑)con.ConnectionString=ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
5ExtJs的.NET控件----YuiGrid(分页/在线编辑)con.Open();
6ExtJs的.NET控件----YuiGrid(分页/在线编辑)
7ExtJs的.NET控件----YuiGrid(分页/在线编辑)
8ExtJs的.NET控件----YuiGrid(分页/在线编辑)offset=offset/page_size;
9ExtJs的.NET控件----YuiGrid(分页/在线编辑)
10ExtJs的.NET控件----YuiGrid(分页/在线编辑)offset+=1;
11ExtJs的.NET控件----YuiGrid(分页/在线编辑)//querythatgetsonlytherecordsneededtothepage
12ExtJs的.NET控件----YuiGrid(分页/在线编辑)//usingthenewROW_NUMBERfunctioninsql2005
13ExtJs的.NET控件----YuiGrid(分页/在线编辑)stringsql="WITHMOVIESAS("+
14ExtJs的.NET控件----YuiGrid(分页/在线编辑)"SELECTROW_NUMBER()OVER"+
15ExtJs的.NET控件----YuiGrid(分页/在线编辑)"(ORDERBY"+sort+""+dir+")ASRow,"+
16ExtJs的.NET控件----YuiGrid(分页/在线编辑)"ID_MOVIE,TITLE,RATING,VOTES,YEAR,GENRE"+
17ExtJs的.NET控件----YuiGrid(分页/在线编辑)"FROMTB_MOVIE)"+
18ExtJs的.NET控件----YuiGrid(分页/在线编辑)"SELECTID_MOVIE,TITLE,GENRE,RATING,VOTES,YEAR"+
19ExtJs的.NET控件----YuiGrid(分页/在线编辑)"FROMMOVIES"+
20ExtJs的.NET控件----YuiGrid(分页/在线编辑)"WHERERowbetween(@PageIndex-1)*@[email protected]*@PageSize";
21ExtJs的.NET控件----YuiGrid(分页/在线编辑)
22ExtJs的.NET控件----YuiGrid(分页/在线编辑)SqlCommandcmd=newSqlCommand(sql,con);
23ExtJs的.NET控件----YuiGrid(分页/在线编辑)//addtheparameterstothequerytograbthecorrectpage
24ExtJs的.NET控件----YuiGrid(分页/在线编辑)cmd.Parameters.AddWithValue("@PageIndex",offset);
25ExtJs的.NET控件----YuiGrid(分页/在线编辑)cmd.Parameters.AddWithValue("@PageSize",page_size);
26ExtJs的.NET控件----YuiGrid(分页/在线编辑)SqlDataAdapteradapt=newSqlDataAdapter(cmd);
27ExtJs的.NET控件----YuiGrid(分页/在线编辑)DataSetds=newDataSet();
28ExtJs的.NET控件----YuiGrid(分页/在线编辑)adapt.Fill(ds);
29ExtJs的.NET控件----YuiGrid(分页/在线编辑)//closestheobjectsanddisposes
30ExtJs的.NET控件----YuiGrid(分页/在线编辑)
31ExtJs的.NET控件----YuiGrid(分页/在线编辑)//GetMovieCount(ds);
32ExtJs的.NET控件----YuiGrid(分页/在线编辑)con.Close();
33ExtJs的.NET控件----YuiGrid(分页/在线编辑)cmd.Dispose();
34ExtJs的.NET控件----YuiGrid(分页/在线编辑)con.Dispose();
35ExtJs的.NET控件----YuiGrid(分页/在线编辑)returnds.Tables[0];
36ExtJs的.NET控件----YuiGrid(分页/在线编辑)}

代码实现上很简单,有了上面的分页查询,下面只需要在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}

二、在线编辑

在实现YuiGrid的在线编辑,首先需将其EnableEdit属性设为True,然后通过CellEdited事件来做数据库更新操 作。其实更新数据库无非就是将当前行的数据取出来,然后执行一条相应的SQL就OK,这里的重点应该是取数据,在标准GridView里通常都是通过命令 参数来搞定的,YuiGrid不同的是通过他自己的事件传递的对象属性来获取,如下:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->1ExtJs的.NET控件----YuiGrid(分页/在线编辑)protectedvoidYuiGrid1_CellEdited(objectsender,ExtExtenders.GridCellEditedArgse)
2ExtJs的.NET控件----YuiGrid(分页/在线编辑)ExtJs的.NET控件----YuiGrid(分页/在线编辑)ExtJs的.NET控件----YuiGrid(分页/在线编辑){
3ExtJs的.NET控件----YuiGrid(分页/在线编辑)SqlConnectioncon=newSqlConnection();
4ExtJs的.NET控件----YuiGrid(分页/在线编辑)con.ConnectionString=System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;//ConnectionString
5ExtJs的.NET控件----YuiGrid(分页/在线编辑)con.Open();
6ExtJs的.NET控件----YuiGrid(分页/在线编辑)SqlCommandcmd=newSqlCommand();
7ExtJs的.NET控件----YuiGrid(分页/在线编辑)cmd.Connection=con;
8ExtJs的.NET控件----YuiGrid(分页/在线编辑)stringsql="UPDATETB_MOVIESET"+e.Field+"[email protected]"+e.Field+
9ExtJs的.NET控件----YuiGrid(分页/在线编辑)"[email protected]_MOVIE";
10ExtJs的.NET控件----YuiGrid(分页/在线编辑)
11ExtJs的.NET控件----YuiGrid(分页/在线编辑)cmd.CommandText=sql;
12ExtJs的.NET控件----YuiGrid(分页/在线编辑)cmd.Parameters.AddWithValue("@"+e.Field,e.Value);
13ExtJs的.NET控件----YuiGrid(分页/在线编辑)cmd.Parameters.AddWithValue("@ID_MOVIE",e.Record["ID_MOVIE"]);
14ExtJs的.NET控件----YuiGrid(分页/在线编辑)try
15ExtJs的.NET控件----YuiGrid(分页/在线编辑)ExtJs的.NET控件----YuiGrid(分页/在线编辑)ExtJs的.NET控件----YuiGrid(分页/在线编辑){
16ExtJs的.NET控件----YuiGrid(分页/在线编辑)cmd.ExecuteNonQuery();
17ExtJs的.NET控件----YuiGrid(分页/在线编辑)}

18ExtJs的.NET控件----YuiGrid(分页/在线编辑)catch(Exceptionex)
19ExtJs的.NET控件----YuiGrid(分页/在线编辑)ExtJs的.NET控件----YuiGrid(分页/在线编辑)ExtJs的.NET控件----YuiGrid(分页/在线编辑){
20ExtJs的.NET控件----YuiGrid(分页/在线编辑)System.Diagnostics.Debug.WriteLine(ex.Message);
21ExtJs的.NET控件----YuiGrid(分页/在线编辑)}

22ExtJs的.NET控件----YuiGrid(分页/在线编辑)}

大致如下图:
ExtJs的.NET控件----YuiGrid(分页/在线编辑)

ExtJs的.NET控件----YuiGrid(分页/在线编辑)

YuiGrid里可以非常方便的嵌入ListBox或DropDownList等控件,只需要在外部任意定义一个 DropDownList控件,然后将YuiGrid对应列的EditControlId属性设置为该控件ID就OK了。如下代码遍上上图的完整定义:

ExtJs的.NET控件----YuiGrid(分页/在线编辑)ExtJs的.NET控件----YuiGrid(分页/在线编辑)Code
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->1ExtJs的.NET控件----YuiGrid(分页/在线编辑)<cc1:YuiGridID="YuiGrid1"runat="server"EnableRowSorting="true"Width="550px"
2ExtJs的.NET控件----YuiGrid(分页/在线编辑)EnablePaging="true"PagingStyle="NavBar"EnableEdit="true"OnCellEdited="YuiGrid1_CellEdited"SelectMultiple="true">
3ExtJs的.NET控件----YuiGrid(分页/在线编辑)<Columns>
4ExtJs的.NET控件----YuiGrid(分页/在线编辑)<cc1:ColModelheader="ID_MOVIE"dataIndex="ID_MOVIE"hidden="true"/>
5ExtJs的.NET控件----YuiGrid(分页/在线编辑)<cc1:ColModelheader="MovieTitle"dataIndex="TITLE"sortable="true"width="230"allowBlank="false"maxLength="40"/>
6ExtJs的.NET控件----YuiGrid(分页/在线编辑)<cc1:ColModelheader="Votes"dataIndex="VOTES"sortable="true"width="90"DataType="Numeric"/>
7ExtJs的.NET控件----YuiGrid(分页/在线编辑)<cc1:ColModelheader="Rating"dataIndex="RATING"sortable="true"width="60"DataType="Numeric"/>
8ExtJs的.NET控件----YuiGrid(分页/在线编辑)<cc1:ColModelheader="Year"dataIndex="YEAR"sortable="true"width="60"EditControlId="cboYear"/>
9ExtJs的.NET控件----YuiGrid(分页/在线编辑)<cc1:ColModelheader="Genre"dataIndex="GENRE"sortable="true"width="120"EditControlId="cboGenre"/>
10ExtJs的.NET控件----YuiGrid(分页/在线编辑)
11ExtJs的.NET控件----YuiGrid(分页/在线编辑)</Columns>
12ExtJs的.NET控件----YuiGrid(分页/在线编辑)</cc1:YuiGrid>
13ExtJs的.NET控件----YuiGrid(分页/在线编辑)
14ExtJs的.NET控件----YuiGrid(分页/在线编辑)<asp:DropDownListID="cboGenre"runat="server"CssClass="x-hid">
15ExtJs的.NET控件----YuiGrid(分页/在线编辑)<asp:ListItemText="Action"Value="Action"></asp:ListItem>
16ExtJs的.NET控件----YuiGrid(分页/在线编辑)<asp:ListItemText="Adventure"Value="Adventure"></asp:ListItem>
17ExtJs的.NET控件----YuiGrid(分页/在线编辑)<asp:ListItemText="Animation"Value="Animation"></asp:ListItem>
18ExtJs的.NET控件----YuiGrid(分页/在线编辑)<asp:ListItemText="Comedy"Value="Comedy"></asp:ListItem>
19ExtJs的.NET控件----YuiGrid(分页/在线编辑)<asp:ListItemText="Crime"Value="Crime"></asp:ListItem>
20ExtJs的.NET控件----YuiGrid(分页/在线编辑)<asp:ListItemText="Documentary"Value="Documentary"></asp:ListItem>
21ExtJs的.NET控件----YuiGrid(分页/在线编辑)<asp:ListItemText="Drama"Value="Drama"></asp:ListItem>
22ExtJs的.NET控件----YuiGrid(分页/在线编辑)<asp:ListItemText="Family"Value="Family"></asp:ListItem>
23ExtJs的.NET控件----YuiGrid(分页/在线编辑)<asp:ListItemText="Fantasy"Value="Fantasy"></asp:ListItem>
24ExtJs的.NET控件----YuiGrid(分页/在线编辑)<asp:ListItemText="Horror"Value="Horror"></asp:ListItem>
25ExtJs的.NET控件----YuiGrid(分页/在线编辑)<asp:ListItemText="Independent"Value="Independent"></asp:ListItem>
26ExtJs的.NET控件----YuiGrid(分页/在线编辑)<asp:ListItemText="Musical"Value="Musical"></asp:ListItem>
27ExtJs的.NET控件----YuiGrid(分页/在线编辑)<asp:ListItemText="Mystery"Value="Mystery"></asp:ListItem>
28ExtJs的.NET控件----YuiGrid(分页/在线编辑)<asp:ListItemText="Noir"Value="Noir"></asp:ListItem>
29ExtJs的.NET控件----YuiGrid(分页/在线编辑)<asp:ListItemText="Romance"Value="Romance"></asp:ListItem>
30ExtJs的.NET控件----YuiGrid(分页/在线编辑)<asp:ListItemText="Sci-Fi"Value="Sci-Fi"></asp:ListItem>
31ExtJs的.NET控件----YuiGrid(分页/在线编辑)<asp:ListItemText="Thriller"Value="Thriller"></asp:ListItem>
32ExtJs的.NET控件----YuiGrid(分页/在线编辑)<asp:ListItemText="War"Value="War"></asp:ListItem>
33ExtJs的.NET控件----YuiGrid(分页/在线编辑)<asp:ListItemText="Western"Value="Western"></asp:ListItem>
34ExtJs的.NET控件----YuiGrid(分页/在线编辑)</asp:DropDownList>

关于ExtJS的.NET控件YuiGrid的分页和在线编辑就介绍这些,详细大家可以访问http://extendersamples.rodiniz.com或下载下面提供的示例代码了解更多。

示例代码下载

相关文章: