html5中文学习网

您的位置: 首页 > 网络编程 > ASP.NET » 正文

改善DataGrid的默分使其更友好_.NET教程_编程技术

[ ] 已经帮助:人解决问题
datagrid

改善DataGrid的默分使其更友好

        DataGrid是.net平台下Web用程序最常用的控件,使用控件可以助您注商的,的示交它理就好了,要的置一些相的性,一漂亮的表格就出了,同,它提供的模板列更大的提高了它的可程性,使我的更加活,想想都得是一件的事!然而,令人感美中不足的是,它的分功能在是不怎,光的字在上面,既有信息又有跳功能,我想,的用太乏味了一吧!於是我就想能不能改善它的分功能呢,使它具上述功能!恩,在想法有了,剩下如何?先我想一下,DataGrid最在客端表一table,也就是服器DataGrid解析一段以<table>始</table>束的html代,然後段代送到求面的客端,注意程是先解析然後送,既然程是的,那也就迎刃而解了,我可以在解析後送前段控件增加新的功能啊!接下的是我要如何截到段整程停住去行我的代,急,先我了解一下DataGrid的成,DataGrid由行集和列集成,它分在服端表DataGrid.Items和DataGrid.Columns,DataGrid分是一DataGridItem,包含在整Items集合中,每DataGrid在建一Item,都引一ItemCreated事件,我可以通捕捉事件取"DataGrid分"象,在象呈至它包含的Page象,也就是生PreRender事件,代其加入新功能,如下所示:

private void dgProducts_ItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)

{

     if (e.Item.ItemType == ListItemType.Pager)

     {

           // 取DataGrid分象其指定PreRender事件的理函

           pagerItem = e.Item;

           pagerItem.PreRender += new System.EventHandler(this.pagerItem_PreRender);

     }

}

private void pagerItem_PreRender(object sender, EventArgs e)

{

     // 事件理代面信息以及跳功能

     .......

} 由於在行上述事件DataGrid已解析生成了html,所以我也能向其中添加html代所需的功能。最生成的新的分如下所示:

在跳功能我使用JavaScript用在文本框中入的值保存在一Html藏字段,然後在服端取藏字段的值,DataGrid指定到,我曾用URL的方式指定window.location新的URL字符串,可是使用window.location致Page_Load()行次。而得不到想要的果。我也考使用ViewState,可那文本框和按是添加去的Html,事先有在服端定,又如何操控它呢!於是念也就一而了!到最後也有用"藏字段"不怎高但能解的方法。以下是"go"按行的JavaScript函:

function go(ctrl,max)

{

     // 用入值是否符合要求

     if(ctrl.value >= 1 && ctrl.value <= max.innerText)

     {

           // 入值保存到藏字段

           document.all.PageNum.value = ctrl.value;

     }

     else

     {

           alert('您入的必是符合面要求的字,最大值是:'+max.innerText);

           ctrl.value="";

           ctrl.focus();

           return false;

     }

}

全部代如下:

.Apsx.cs

using System;

using System.Collections;

using System.ComponentModel;

using System.Data;

using System.Data.SqlClient;

using System.Drawing;

using System.Web;

using System.Web.SessionState;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.HtmlControls;

 

namespace Sky_MsdnDataGrid

{

     /// <summary>

     /// SortDataGrid 的摘要描述。

     /// </summary>

     public class SortDataGrid : System.Web.UI.Page

     {

           protected System.Web.UI.WebControls.DataGrid dgProducts;

           private string connStr;

           private string cmdText;

           private DataGridItem pagerItem;

           protected System.Web.UI.HtmlControls.HtmlInputHidden PageNum;

           private int pagerNum = 1;

           private DataTable productTable;

    

           private void Page_Load(object sender, System.EventArgs e)

           {

                // 面加判藏字段中是否有值,如果有值代表用使用了跳功能,DataGrid的前用指定

                if (this.PageNum.Value != string.Empty)

                {

                     this.dgProducts.CurrentPageIndex =  Convert.ToInt32(this.PageNum.Value) - 1;

                     if (ViewState["SortExprName"] != null)

                           this.BindData("select * from Products order by " + ViewState["SortExprName"].ToString() + " asc");

                     else

                           this.BindData("select * from Products");

                     this.PageNum.Value = string.Empty;

                }

                else

                {

                     this.BindData("select * from Products");

                }

           }

          

           // 定

           private void BindData(string sqlText)

           {

                this.connStr = "server=localhost;database=NorthWind;uid=sa";

                this.cmdText = sqlText;

 

                SqlConnection conn = new SqlConnection();

                SqlCommand cmd = new SqlCommand();

                SqlDataAdapter adapter = new SqlDataAdapter();

                productTable = new DataTable("Products");

 

                conn.ConnectionString = this.connStr;

                cmd.CommandType = CommandType.Text;

                cmd.CommandText = this.cmdText;

                cmd.Connection = conn;

                adapter.SelectCommand = cmd;

 

                adapter.Fill(productTable);

 

                this.dgProducts.DataSource = productTable;

                this.dgProducts.DataBind();

           }

 

           #region Web Form 工具生的程式

           override protected void OnInit(EventArgs e)

           {

                //

                // CODEGEN: 此 ASP.NET Web Form 工具所需的呼叫。

                //

                InitializeComponent();

                base.OnInit(e);

           }

          

           /// <summary>

           /// 此工具支援所必的方法 - 勿使用程式器修改

           /// 方法的容。

           /// </summary>

           private void InitializeComponent()

           {   

                this.dgProducts.ItemCreated += new System.Web.UI.WebControls.DataGridItemEventHandler(this.dgProducts_ItemCreated);

                this.dgProducts.PageIndexChanged += new System.Web.UI.WebControls.DataGridPageChangedEventHandler(this.dgProducts_PageIndexChanged);

                this.dgProducts.SortCommand += new System.Web.UI.WebControls.DataGridSortCommandEventHandler(this.dgProducts_SortCommand);

                this.Load += new System.EventHandler(this.Page_Load);

 

           }

           #endregion

          

           // 排序功能

           private void dgProducts_SortCommand(object source, System.Web.UI.WebControls.DataGridSortCommandEventArgs e)

           {

               

                this.dgProducts.CurrentPageIndex = 0;

                ViewState["SortExprName"] = e.SortExpression;

                this.BindData("select * from Products order by "+ e.SortExpression + " asc");

           }

 

           private void dgProducts_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)

           {

                this.dgProducts.CurrentPageIndex = e.NewPageIndex;

                if (ViewState["SortExprName"] != null)

                     this.BindData("select * from Products order by " + ViewState["SortExprName"].ToString() + " asc");

                else

                     this.BindData("select * from Products");

           }

 

           private void dgProducts_ItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)

           {

                if (e.Item.ItemType == ListItemType.Pager)

                {

                     // 取DataGrid分象其指定PreRender事件的理函

                     pagerItem = e.Item;

                     pagerItem.PreRender += new System.EventHandler(this.pagerItem_PreRender);

                }

           }

 

           private void pagerItem_PreRender(object sender, EventArgs e)

           {

                if (this.pagerNum == 1)

                {

                     this.pagerNum = this.pagerNum - 1;

                     return;

                }

               

                // currentPageNum-前 recordCount- pageCount-

                string currentPageNum = Convert.ToString(this.dgProducts.CurrentPageIndex + 1);

                string recordCount = this.productTable.Rows.Count.ToString();

                string pageCount = this.dgProducts.PageCount.ToString();

               

                // 建元格包含面信息

                TableCell groupCell = new TableCell();

                groupCell.Text = "<b><font face='楷' size=3><font color=OliveDrab>前第</font><font color=red>" + currentPageNum + "</font><font color=OliveDrab> 每<font color=red>" + this.dgProducts.PageSize.ToString() + "</font> (" +

                     "共</font><font color=red>" + recordCount + "</font><font color=OliveDrab>,共</font><font color=red><label id='maxPage'>" + pageCount + "</label></font><font color=OliveDrab>)</font></font></b>";

               

                // 建元格包含跳功能

                TableCell operCell = new TableCell();

                operCell.Text = "<input type='text' id='textbox' name='T1' size='4' style='border-style: solid; border-width: 1px; padding-left: 4px; padding-right: 4px; padding-top: 1px; padding-bottom: 1px'> " +

                    "<input type='submit' value='go' name='B1' >";

               

                // pagerItem.Cells[0]代表DataGrid默分,其所跨列1

                pagerItem.Cells[0].ColumnSpan = 1;

                groupCell.HorizontalAlign = HorizontalAlign.Left;

                groupCell.ColumnSpan = this.dgProducts.Columns.Count - 2;

                operCell.HorizontalAlign = HorizontalAlign.Right;

                pagerItem.Cells.AddAt(0,groupCell);

                pagerItem.Cells.AddAt(2,operCell);

           }

     }

}

.Aspx

<%@ Page language="c#" Codebehind="SortDataGrid.aspx.cs" AutoEventWireup="false" Inherits="Sky_MsdnDataGrid.SortDataGrid" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >

<HTML>

     <HEAD>

           <title>SortDataGrid</title>

           <meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">

           <meta content="C#" name="CODE_LANGUAGE">

           <meta content="JavaScript" name="vs_defaultClientScript">

           <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">

           <script language="javascript">

                function go(ctrl,max)

                {

                     // 用入值是否符合要求

                     if(ctrl.value >= 1 && ctrl.value <= max.innerText)

                     {

                           // 入值保存到藏字段

                           document.all.PageNum.value = ctrl.value;

                     }

                     else

                     {

                     alert('您入的必是符合面要求的字,最大值是:'+max.innerText);

                     ctrl.value="";

                     ctrl.focus();

                          return false;

                     }

                }

           </script>

     </HEAD>

     <body MS_POSITIONING="GridLayout">

           <form id="Form1" method="post" runat="server">

                <asp:DataGrid id="dgProducts" style="Z-INDEX: 101; LEFT: 8px; POSITION: absolute; TOP: 16px" runat="server" Width="100%" AllowSorting="True" AutoGenerateColumns="False" AllowPaging="True">

                     <FooterStyle ForeColor="#4A3C8C" BackColor="#B5C7DE"></FooterStyle>

                     <SelectedItemStyle Font-Bold="True" ForeColor="#F7F7F7" BackColor="#738A9C"></SelectedItemStyle>

                     <AlternatingItemStyle Font-Size="X-Small" BackColor="#CCFFFF"></AlternatingItemStyle>

                     <ItemStyle Font-Size="X-Small" BackColor="White"></ItemStyle>

                     <HeaderStyle Font-Size="X-Small" Font-Bold="True" HorizontalAlign="Center" ForeColor="White" BackColor="#99CCCC"></HeaderStyle>

                     <Columns>

                           <asp:BoundColumn DataField="ProductID" HeaderText="品">

                                <HeaderStyle Width="15%"></HeaderStyle>

                                <ItemStyle HorizontalAlign="Center"></ItemStyle>

                           </asp:BoundColumn>

                           <asp:BoundColumn DataField="SupplierID" HeaderText="供商">

                                <HeaderStyle Width="15%"></HeaderStyle>

                                <ItemStyle HorizontalAlign="Center"></ItemStyle>

                           </asp:BoundColumn>

                           <asp:BoundColumn DataField="ProductName" SortExpression="ProductName" HeaderText="品名">

                                <HeaderStyle HorizontalAlign="Left" Width="30%"></HeaderStyle>

                           </asp:BoundColumn>

                           <asp:BoundColumn DataField="UnitPrice" SortExpression="UnitPrice" HeaderText="品">

                                <HeaderStyle Width="20%"></HeaderStyle>

                                <ItemStyle HorizontalAlign="Center"></ItemStyle>

                           </asp:BoundColumn>

                           <asp:BoundColumn DataField="UnitsInStock" SortExpression="UnitsInStock" HeaderText="供">

                                <HeaderStyle Width="20%"></HeaderStyle>

                                <ItemStyle HorizontalAlign="Center"></ItemStyle>

                           </asp:BoundColumn>

                     </Columns>

                     <PagerStyle Font-Size="X-Small" HorizontalAlign="Center" ForeColor="#4A3C8C" BackColor="LightBlue" Mode="NumericPages"></PagerStyle>

                </asp:DataGrid>

                <INPUT style="Z-INDEX: 102; LEFT: 8px; POSITION: absolute; TOP: 256px" id="PageNum" runat="server" type="hidden">

           </form>

     </body>

</HTML>

最行效果:


kgbHTML5中文学习网 - HTML5先行者学习网
kgbHTML5中文学习网 - HTML5先行者学习网
(责任编辑:)
推荐书籍
推荐资讯
关于HTML5先行者 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助