利用Ajax实现的一个DataGrid例子

利用Ajax的技术异步调用服务器端的Web Service,生成一个在客户端分页的DataGrid。

首先来看看我们的Web Servcie,它利用传递过来的SQL生成数据集,采用标准的DataGrid控件利用RenderControl输出为标准的HTML。

 

namespace GenricAjaxWS
{
 [WebService(Namespace="http://localhost/GenricAjaxWS/")]
 public class GenricAjaxWS : System.Web.Services.WebService
 {
  SqlConnection con;
  SqlDataAdapter da;
  SqlCommand cmd;
  DataSet ds;

  public GenricAjaxWS()
  {
   InitializeComponent();
   con=new SqlConnection(ConfigurationSettings.AppSettings["Connect"]);
   da=new SqlDataAdapter("",con);
   cmd=new SqlCommand("",con);
   ds=new DataSet("TahaSchema");
   
  }

// 省略系统生成的

  
  /// <summary>
  /// 生成DataGrid的HTML
  /// </summary>
  [WebMethod]
  public string getGrid(string sqlStr,int pageIndex)
  {
   da.SelectCommand.CommandText=sqlStr;
   da=new SqlDataAdapter(sqlStr,con);
   da.Fill(ds,"myTable");

   DataGrid dataGrid = new DataGrid();
   dataGrid.AutoGenerateColumns = true;
   dataGrid.DataSource = ds.Tables["myTable"].DefaultView;
   dataGrid.AllowPaging = true;
   dataGrid.PageSize = 4;
   dataGrid.PagerStyle.Visible = false;
   dataGrid.CurrentPageIndex = pageIndex;
   try
   {
    dataGrid.DataBind();
   }
   catch(Exception)
   {
    
   }
   StringWriter wr = new StringWriter();
   HtmlTextWriter writer = new HtmlTextWriter(wr);
   dataGrid.RenderControl(writer);
   string gridHtml = wr.ToString();
   wr.Close();
   writer.Close();
   DropDownList ddl_Pager = new DropDownList();
   ddl_Pager.Attributes.Add("onchange","goToPage(this.value)");
   string pager="";
   for(int i=0;i<dataGrid.PageCount;i++)
   {
    ListItem lItem = new ListItem(i.ToString(),i.ToString());
    ddl_Pager.Items.Add(lItem);
    if(i==pageIndex)
    {
     pager += "[<span style=/"background-color:#ffdd11;width:20px;align:center/"><a href=/"#/" οnclick=/"goToPage('"+i+"')/">"+i+"</a></span>]";
    }
    else
    {
     pager += "[<span style=/"width:20px;align:center/"><a href=/"#/" οnclick=/"goToPage('"+i+"')/" >"+i+"</a></span>]";
    }
   }
   ddl_Pager.SelectedIndex = pageIndex;
   wr = new StringWriter();
   writer = new HtmlTextWriter(wr);
   ddl_Pager.RenderControl(writer);
   string pagerHtml = "<input type='button' value='<' οnclick='goToPrevPage()'>";
   pagerHtml += wr.ToString();
   pagerHtml += "<input type='button' value='>' οnclick='this.disabled=goToNextPage()'>";
   wr.Close();
   writer.Close();
   return pager+pagerHtml+"<br>"+gridHtml;   
  }
 }
}

 

在利用Ajax来完成一个异步的Web Service。

AjaxFuncs.js


var xmlhttp;
var ph;
var fillGrid_Str_SQL="";
var currentPageIndex ;
function fillGrid(myPH,str_Sql,pageIndex){ 
 ph = window.document.getElementById(myPH);
 fillGrid_Str_SQL = str_Sql;
 currentPageIndex = pageIndex;

// Web Service调用的URL
 var url = "http://localhost/GenricAjaxWS/GenricAjaxWS.asmx/getGrid?sqlStr="+str_Sql+"&pageIndex="+pageIndex;

 if(window.XMLHttpRequest)
    {
        xmlhttp=new XMLHttpRequest();
        xmlhttp.onreadystatechange=fillGrid_Change;
        xmlhttp.open("GET",url,true);
        xmlhttp.send(null);
    }
    else if (window.ActiveXObject)
        {
        try
            {
            xmlhttp= new ActiveXObject("Msxml2.XMLHTTP");
            }
        catch(e)
            {
            try
            {
                xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
            }
            catch(e){}
        }
                        
        if(xmlhttp)
        {
            try
            {
            xmlhttp.onreadystatechange=fillGrid_Change;
            xmlhttp.open("GET",url,false);
            xmlhttp.send();
            }
            catch(e){} 
        }
    }
}

function fillGrid_Change()
{
 if(xmlhttp.readyState==4&&xmlhttp.status==200)
 {

// 输出Web Service返回的标准HTML语句
  var row =  xmlhttp.responseXML.selectNodes(".//"); 
  ph.innerHTML = row[1].text;
 }
}

function goToPage(pageIndex){
 fillGrid(ph.id,fillGrid_Str_SQL,pageIndex)
}

function goToNextPage(){
 try{ 
  fillGrid(ph.id,fillGrid_Str_SQL,parseInt(currentPageIndex)+1);
  return false;
 }
 catch(e){
  return true;
 }
}

function goToPrevPage(){
 fillGrid(ph.id,fillGrid_Str_SQL,parseInt(currentPageIndex)-1)
}

最后就是客户端的页面了,非常简单

<html>
  <head>
    <title>AjaxGrid</title>
  <script language="javascript" type="text/javascript" src="ajaxFuncs.js"></script>
  </head>
  <body MS_POSITIONING="GridLayout" οnlοad="fillGrid('myPH','select * from employee',1)">
    <form id="Form1" method="post" runat="server">
  <div id="myPH" ></div>  
     </form>
  </body>
</html>

截图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值