public static string DataTableToJSON(DataTable dt, string dtName)
{
StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
using (JsonWriter jw = new JsonTextWriter(sw))
{
JsonSerializer ser = new JsonSerializer();
jw.WriteStartObject();
jw.WritePropertyName(dtName);
jw.WriteStartArray();
foreach (DataRow dr in dt.Rows)
{
jw.WriteStartObject();
foreach (DataColumn dc in dt.Columns)
{
jw.WritePropertyName(dc.ColumnName);
ser.Serialize(jw, dr[dc].ToString());
}
jw.WriteEndObject();
}
jw.WriteEndArray();
jw.WriteEndObject();
sw.Close();
jw.Close();
}
return sb.ToString();
}
我们来看一下上面关键的js代码:InitData(pageindx)是用来处理第pageindx页的显示数据的,我们着重来看一下这个ajax处理文件NewsHandler.ashx,当然也可以用aspx文件作为ajax后台处理文件。
在项目中添加ajax文件夹用来存放ajax处理文件,并且添加Generic Handler类型的文件(或是一般的webform),取名为NewsHandler.ashx,这个文件是用来处理ajax请求的。
主要代码如下:
复制代码 代码如下:
int pageindex;//页数
int.TryParse(context.Request["pageno"], out pageindex);//把赋值给pageindex
string orderby = context.Request["orderby"].ToString();//以什么排序
DataTable dt = new DataTable();
dt = PageData(pageindex, 10, "tb_news", orderby);//获取数据
string jsonData = DataTableToJSON(dt, "News");//创建json对象,将datatable对象转换为json对象
context.Response.Write(jsonData);//返回json数据
上面的代码中有这样一个方法 PageData(pageindex, 10, "tb_news", orderby);方法主要获取第几页的数据,详细代码如下:
代码
复制代码 代码如下:
#region 返回特定页数的数据
/// <summary>
/// 返回特定页数的数据
/// </summary>
/// <param>特定的页数</param>
/// <param>页的大小</param>
/// <param>哪张表</param>
/// <returns></returns>
public DataTable PageData(int pageindex, int pagesize, string table, string orderby)
{
string connectionString = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["NewsConnection"].ToString();
OleDbConnection conn;
if (pageindex < 1)
pageindex = 1;
conn = new OleDbConnection(connectionString);
DataTable dt=new DataTable();
try
{
conn.Open();
OleDbCommand cmdTotal = new OleDbCommand("select count(0) from " + table, conn);
int recordCount = Convert.ToInt32(cmdTotal.ExecuteScalar());//数据的总数
int pageCount;//总共的页数
if (recordCount % pagesize > 0)
pageCount = recordCount / pagesize + 1;
else
pageCount = recordCount / pagesize;
if (pageindex > pageCount)
pageindex = pageCount;
DataTable dataTemp = new DataTable();
string cmdText = "select news_id,news_title,news_readtimes,news_time from " + table + " order by " + orderby + " desc";
OleDbCommand cmd = new OleDbCommand(cmdText, conn);
OleDbDataAdapter oda = new OleDbDataAdapter(cmd);
oda.Fill(dataTemp);
dt= dataTemp.Clone();
for (int i = 0; i < pagesize; i++)
{
if (recordCount <= (pagesize * (pageindex - 1) + i))
break;
dt.Rows.Add(dataTemp.Rows[pagesize * (pageindex - 1) + i].ItemArray);
}
}
catch (Exception e)
{
}
finally
{
conn.Close();
}
return dt;
}
#endregion
整合一下就实现了需求分析的第三点了。可能上面的代码有点多有点乱。
按照以下的步骤:
1。将相应的js文件和css文件拷到对应的位置
2。添加ajax文件,并添加NewsHandler.ashx文件用以处理ajax请求
3。在NewsHandler.ashx.cs文件中添加代码,有两个方法比较重要,PageData(int pageindex, int pagesize, string table, string orderby)和DataTableToJSON(DataTable dt, string dtName)
4。将NewsHandler.ashx.cs中处理代码和返回的json字符串整合好,主要代码以在上文给出,在这里注意添加命名空间和添加引用(提供下载)
5。编辑NewsList.aspx文件,分别编辑前台和后台。前台用以显示(已大体给出,需结合上一篇文章),后台主要得到一个新闻条数
主要代码如下:
复制代码 代码如下:
protected void InitPageCount()
{
conn = new OleDbConnection(connectionString);//创建新的连接
try
{
conn.Open();
string cmdText = "select count(0) as pages from tb_news";
OleDbCommand cmd = new OleDbCommand(cmdText, conn);
DataTable dt = new DataTable();
OleDbDataAdapter oda = new OleDbDataAdapter(cmd);
oda.Fill(dt);
if (dt != null)
{
pagecount = dt.Rows[0]["pages"].ToString();
}
}
catch (Exception e)
{
pagecount = "0";
Response.Write("Error:" + e.Message);//如果连接失败,将错误显示出来
}
finally
{
conn.Close();//一定要及时关掉conn
}
}
需-需声明protected string pagecount;以便让前台能够获取
附代码的下载:(只实现了无刷新的分页,预览新闻内容等待下一章)
css、js、dll、项目(仅无刷新分页)
注:虽然提供了完整的代码,但不建议一开始就下载完整的,要自己动手
您可能感兴趣的文章: