分享
 
 
 

客户端回调实现gridView无刷新分页

王朝other·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

由于客户对速度和性能上的要求越来越变态,而数据量一天天的庞大,因此本人产生了数据的查询和分页完全由客户端回调来实现。想法看上去复杂,实现起来也不难。废话不多说,看程序吧。

一、存储过程

包头:

create or replace package H_QUERYPACK is

-- Author : Evorul

-- Created : 2007-3-29

-- Purpose : 查询机构表

-- Public type declarations

type MYCURSOR is REF CURSOR;

PROCEDURE QUERYLOG (RET_CURSOR OUT MYCURSOR,ERRORCODE OUT INT,p_logID int,p_StartTime Date,p_EndTime Date,p_Operator varchar2 ,p_OrderField varchar2 ,

p_Desc int,p_PageSize Int,p_PageIndex Int,p_RecordCount Out Int);

end H_QUERYPACK;

包体:

create or replace package body H_QUERYPACK Is

-- Author : Evorul

-- Created : 2007-3-29

-- Purpose : 查询

-- 查询公司,分页用

PROCEDURE QUERYLOG (RET_CURSOR OUT MYCURSOR,ERRORCODE OUT INT,p_logID int,p_StartTime Date,p_EndTime Date,p_Operator varchar2 ,p_OrderField varchar2 ,

p_Desc int,p_PageSize Int,p_PageIndex Int,p_RecordCount Out Int)

AS

v_sql varchar2(3000);

v_sqlcount varchar2(3000);

v_orderfield varchar2(100);

v_order VARCHAR2(5); --顺序

v_count int;

v_heiRownum int;

v_lowRownum int;

BEGIN

ERRORCODE:=0;

v_sql:='select * from LOG Where 1=1 ';

if(p_logID <> 0)then

v_sql := v_sql || ' and id = ' || TO_CHAR(p_logID);

end if;

IF p_Operator Is Not Null Then then

v_sql := v_sql || 'And operator LIKE ''%' || RTRIM(LTRIM(p_Operator))||'%''';

end if;

v_sql := v_sql ||' and (TO_CHAR(time,''YYYYMMDD'') between ''' || to_char(p_StartTime, 'YYYYMMDD') ||''' and ''' || to_char(p_EndTime, 'YYYYMMDD') ||''')';

----取记录总数

v_sqlcount := 'select count(*) from (' || v_sql || ')';

execute immediate v_sqlcount into v_count;

p_RecordCount := v_count;

--排序字段

IF p_OrderField IS NOT NULL THEN

v_orderfield:=p_OrderField;

Else

v_orderfield:='ID';

END IF;

--是否降序

IF p_Desc <>0 THEN

v_order:=' ASC';

Else

v_order:=' DESC';

END IF;

v_sql:=v_sql || 'ORDER BY '|| v_orderfield || v_order;

----执行分页查询

v_heiRownum := p_PageIndex * p_PageSize;

v_lowRownum := v_heiRownum - p_PageSize + 1;

v_sql := 'SELECT * FROM (

SELECT A.*, rownum rn FROM ('|| v_sql ||') A WHERE rownum <= '|| to_char(v_heiRownum) || ') B WHERE rn >= ' || to_char(v_lowRownum) ;

OPEN RET_CURSOR FOR v_sql;

EXCEPTION

WHEN NO_DATA_FOUND THEN

ERRORCODE:=9999;

WHEN OTHERS THEN

ERRORCODE:=9999;

END QUERYLOG;

END H_QUERYPACK;

二、程序

DataAccess.cs

using System;

using System.Data;

using System.Data.OracleClient;

using System.Collections;

using System.Collections.Specialized;

/**//// <summary>

///数据层 author: EvoRul date:2007-03-29

/// </summary>

public class DataAccess

...{

/**//// <summary>

/// 返回数据库连接字符串

/// </summary>

public static String DatabaseConnectionString

...{

get

...{

NameValueCollection configSettings = (NameValueCollection)System.Configuration.ConfigurationManager.GetSection("appSettings");

return configSettings["connectionString"];

}

}

/**//// <summary>

/// 返回每一页显示的纪录数

/// </summary>

public static int RowsPerPage

...{

get

...{

NameValueCollection configSettings = (NameValueCollection)System.Configuration.ConfigurationManager.GetSection("appSettings");

return Convert.ToInt32(configSettings["rowsPerPage"]);

}

}

/**//// <summary>

/// 获取特定日志集合

/// </summary>

/// <param name="typeID">日志类型</param>

/// <param name="userID">操作人</param>

/// <param name="strOrderField">排序字段</param>

/// <param name="intASC">是否升序 0-降序,1-升</param>

/// <param name="PageIndex">页码</param>

/// <param name="rowCount">页行数</param>

/// <param name="recordSum">符合条件的总记录数</param>

/// <returns></returns>

public static ArrayList QueryLog(string strOperator,DateTime dtStartTime,DateTime dtEndTime, string strOrderField,

int intASC, int PageIndex, int rowCount, out int recordSum)

...{

// 返回集合

ArrayList myArrayList = new ArrayList();

// 创建连接

OracleConnection myConnection = new OracleConnection(DatabaseConnectionString);

try

...{

// 打开连接

myConnection.Open();

}

catch (Exception ex)

...{

throw (ex);

}

try

...{

// 创建存储过程

OracleCommand myCommand = new OracleCommand("H_QUERYPACK.QUERYLOG", myConnection);

myCommand.CommandType = CommandType.StoredProcedure;

OracleDataReader dr;

// ============================== 参数定义 ==============================

// 返回值

myCommand.Parameters.Add("RET_CURSOR", OracleType.Cursor);

myCommand.Parameters["RET_CURSOR"].Direction = ParameterDirection.Output;

OracleParameter ret = myCommand.Parameters.Add("ERRORCODE", OracleType.Int32);

ret.Direction = ParameterDirection.Output;

OracleParameter retCountSum = myCommand.Parameters.AddWithValue("p_RecordCount", OracleType.Int32);

retCountSum.Direction = ParameterDirection.Output;

// 编号

myCommand.Parameters.AddWithValue("p_logID", OracleType.Int32).Value = 0;

// 用户编号

myCommand.Parameters.AddWithValue("p_Operator", OracleType.VarChar).Value = strOperator;

// 时间下限

myCommand.Parameters.AddWithValue("p_StartTime", OracleType.DateTime).Value = dtStartTime;

// 时间上限

myCommand.Parameters.AddWithValue("p_EndTime", OracleType.DateTime).Value =dtEndTime;

// 排序字段

myCommand.Parameters.AddWithValue("p_OrderField", OracleType.VarChar).Value = strOrderField;

// 怎么排序

myCommand.Parameters.AddWithValue("p_Desc", OracleType.Int32).Value = intASC;

// 每页行数

myCommand.Parameters.AddWithValue("p_PageSize", OracleType.Int32).Value = rowCount;

//页码

myCommand.Parameters.AddWithValue("p_PageIndex", OracleType.Int32).Value = PageIndex;

// ============================ 参数定义完毕 ============================

// 执行存储过程

dr = myCommand.ExecuteReader();

// 执行未成功

if (Convert.ToInt32(ret.Value) != 0)

throw new Exception("执行存储过程出错!");

// 总记录数

recordSum = Convert.ToInt32(retCountSum.Value);

while (dr.Read())

...{

// 创建新日志

Log log = new Log();

//操作业务类型

if (dr["operationtype"] != DBNull.Value)

...{

log.OperationType = Convert.ToString(dr["operationtype"]);

}

// 时间

if (dr["time"] != DBNull.Value)

log.Time = Convert.ToDateTime(dr["time"]);

// 用户

if (dr["operator"] != DBNull.Value)

...{

log.Operator = Convert.ToString(dr["operator"]);

}

// 信息

if (dr["info"] != DBNull.Value)

log.Info = Convert.ToString(dr["info"]);

// 加入返回集合

myArrayList.Add(log);

}

dr.Close();

return myArrayList;

}

catch (Exception ex)

...{

throw (ex);

}

finally

...{

myConnection.Close();

}

}

}

DataLogic.cs

using System;

using System.Data;

using System.Configuration;

using System.Collections;

/**//// <summary>

/// 业务逻辑层 author: EvoRul date:2007-03-29

/// </summary>

public class DataLogic

...{

public DataLogic()

...{

}

public static int recordSum = 0;

/**//// <summary>

/// 查询日志

/// </summary>

/// <param name="strOperator">操作人</param>

/// <param name="dtStarTime">时间范围下限</param>

/// <param name="dtEndTime">时间上限</param>

/// <param name="Pageid">页码</param>

/// <returns></returns>

public static IEnumerable GetLogData(string strOperator,DateTime dtStarTime,DateTime dtEndTime, string Pageid)

...{

return Log.GetList(strOperator,dtStarTime,dtEndTime,"time",1, Convert.ToInt32(Pageid),DataAccess.RowsPerPage,out recordSum);

}

}

Log.cs

using System;

using System.Data;

using System.Collections;

/**//// <summary>

/// 日志类

/// </summary>

public class Log

...{

// ============================== 成员 ==============================

protected string operationType;

/**//// <summary>

/// 时间

/// </summary>

protected DateTime time = new DateTime();

/**//// <summary>

/// 用户

/// </summary>

protected string m_operator;

/**//// <summary>

/// 信息

/// </summary>

protected string info = "";

// ============================== 属性 ==============================

public string OperationType

...{

get ...{ return operationType; }

set ...{ operationType = value; }

}

/**//// <summary>

/// 时间

/// </summary>

public DateTime Time

...{

get ...{ return time; }

set ...{ time = value; }

}

/**//// <summary>

/// 用户

/// </summary>

public string Operator

...{

get ...{ return m_operator; }

set ...{ m_operator = value; }

}

/**//// <summary>

/// 信息

/// </summary>

public string Info

...{

get ...{ return info; }

set ...{ info = value; }

}

// ============================== 方法 ==============================

/**//// <summary>

/// 创建空日志实例

/// </summary>

public Log()

...{

}

/**//// <summary>

/// 新增日志

/// </summary>

public void Add()

...{

try

...{

// 暂不支持该方法

throw new Exception("新增日志");

}

catch (Exception ex)

...{

throw (ex);

}

}

/**//// <summary>

/// 修改日志(不支持)

/// </summary>

public void Modify()

...{

// 暂不支持该方法

throw new Exception("修改日志");

}

/**//// <summary>

/// 删除日志

/// </summary>

public void Del()

...{

// 暂不支持该方法

throw new Exception("修改日志");

}

/**//// <summary>

/// 获取特定的日志集

/// </summary>

/// <param name="strOperator">操作人</param>

/// <param name="dtStartTime">开始时间</param>

/// <param name="dtEndTime">结束时间</param>

/// <param name="strOrderField">排序字段</param>

/// <param name="intASC">0-降序,1-升序</param>

/// <param name="PageIndex">页码</param>

/// <param name="rowCount">页行数</param>

/// <param name="recordSum">总记录数</param>

/// <returns></returns>

public static ArrayList GetList(string strOperator,DateTime dtStartTime,DateTime dtEndTime,string strOrderField,int intASC, int PageIndex, int rowCount, out int recordSum)

...{

return DataAccess.QueryLog(strOperator,dtStartTime,dtEndTime,strOrderField, intASC, PageIndex, rowCount, out recordSum);

}

}

前台页 Default.aspx

<%...@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

<title>客户端回调</title>

<style type="text/css">...

body {...}{

font-size: 12px;

color: #525252;

}

td {...}{

font-size: 12px;

color: #525252;

}

th {...}{

font-size: 12px

}

a:link {...}{

color: #000000; text-decoration: none

}

a:visited {...}{

color: #525252; text-decoration: none

}

a:hover {...}{

color: #0095A7; text-decoration: underline

}

td.alt_1 {...}{

border-top: 1px solid #d6d6d6;

border-right: 1px solid #d6d6d6;

font-size:12px;

color: #4f6b72;

}

td.alt_2 {...}{

border-top: 1px solid #d6d6d6;

border-right: 1px solid #d6d6d6;

}

td.alt_3 {...}{

border-left: 1px solid #d6d6d6;

border-bottom: 1px solid #d6d6d6;

}

td.alt_4 {...}{

border-left: 1px solid #d6d6d6;

border-right: 1px solid #d6d6d6;

}

</style>

<script type="text/javascript">...

//author: EvoRul date:2007-03-25

var PageIndex=1;

function QueryServer(objOperator,objStartTime,objEndTime,intIndex,boolReset)

...{

context = gridspan;

context.innerHTML = "<IMG SRC='../images/pie.gif' />数据加载中...";

arg = "ServerMethodQuery|" + objOperator.value.replace(/$/g,"")+"$"+ objStartTime.value.replace(/$/g,"")+"$"+ objEndTime.value.replace(/$/g,"") +"$"+ intIndex.toString().replace(/$/g,"")+"$"+ boolReset.toString().replace(/$/g,"");

<%= ClientScript.GetCallbackEventReference(this, "arg", "ReceiveServerData", "context")%>;

}

function ReceiveServerData(result, context)

...{

context.innerHTML = (result.split('$'))[0];

var t1=document.getElementById("RecordSum");

var t2=document.getElementById("PageSum");

var t3=document.getElementById("CurrentPage");

var t5=document.getElementById("LinkUp");

var t6=document.getElementById("Linkdown");

var t7=document.getElementById("DownListIndex");

t1.innerHTML = (result.split('$'))[1];

t2.innerHTML = (result.split('$'))[2];

t3.innerHTML = (result.split('$'))[3];

PageIndex=eval((result.split('$'))[3]);

if(PageIndex>1)

...{

t5.innerHTML="<a href="#" onclick="QueryServer(txtOperator,TxtStartTime,TxtEndTime,"+(PageIndex-1).toString()+",'false')">上一页</a>";

}

else

t5.innerHTML = "上一页";

if(PageIndex< eval((result.split('$'))[2]))

...{

t6.innerHTML="<a href="#" onclick="QueryServer(txtOperator,TxtStartTime,TxtEndTime,"+(PageIndex+1).toString()+",'false')">下一页</a>";

}

else

t6.innerHTML="下一页";

if(result.split('$').length>4)

...{

var t4=document.getElementById("SpanIndex");

t4.innerHTML = (result.split('$'))[4];

}

t7.value=PageIndex;

}

function functionPageload()

...{

if(document.readyState!="complete") return;

context = gridspan;

arg = "ServerMethodQuery|" +"$"+"1753-1-1"+ "$"+"9999-12-31"+ "$"+ "1"+"$"+ "true";

<%= ClientScript.GetCallbackEventReference(this, "arg", "ReceiveServerData", "context")%>;

//页面加载完后执行的代码

}

//页面加载状态改变时执行的方法

document.onreadystatechange=functionPageload;

</script>

</head>

<body>

<form id="form1" runat="server">

<div>

<table style="width:100%; background-color:#ffffff; margin: 0px;" cellpadding="0" cellspacing="0" border="0" id="table1">

<tr>

<td style="width:102%; height: 445px;" align="center" valign="top">

<br />

<table cellpadding="0" cellspacing="0" border="0" width="95%">

<tr>

<td><img src="../images/round-1.gif" width="13" height="30" alt="" /></td>

<td style="width:100%;background-color:#efefef;" class="alt_1">

日志查询</td>

</tr>

<tr>

<td class="alt_4" valign="top" colspan="2" align="center">

<table cellpadding="0" cellspacing="0" border="0" width="95%">

<tr>

<td style="width:120px; height:30px;" align="right">

操作人员:</td>

<td align="left" style="width: 143px">

&nbsp;<asp:TextBox ID="txtOperator" runat="server" CssClass="border" ReadOnly="False"

Width="90px"></asp:TextBox></td>

<td style="width:71px; height:30px;" align="right">

操作时间:</td>

<td align="left">

&nbsp;<asp:TextBox ID="TxtStartTime" runat="server" CssClass="border"

ReadOnly="False" Width="90px"></asp:TextBox>-<asp:TextBox

ID="TxtEndTime" runat="server" CssClass="border"

ReadOnly="False" Width="90px"></asp:TextBox></td>

</tr>

<tr>

<td colspan="4" style="background-image:url(../images/point.gif); height:12px;"></td>

</tr>

<tr>

<td colspan="4" style="height:30px; text-align: center;">

<asp:Button ID="Submit" runat="server" CssClass="btn2" Text=" 确定 " Height="20px" Width="50px" /></td>

</tr>

</table>

</td>

</tr>

<tr>

<td colspan="2" align="center">

<table cellpadding="0" cellspacing="0" border="0" width="100%">

<tr>

<td style="width:100%;" class="alt_3"></td>

<td></td>

</tr>

</table>

</td>

</tr>

</table>

<span id="gridspan">

<asp:GridView ID="Logs" runat="server" AutoGenerateColumns="False"

GridLines="Horizontal" PageSize="15"

Width="95%" BackColor="White" BorderColor="#336666" BorderStyle="Double" BorderWidth="3px" CellPadding="4">

<RowStyle ForeColor="#333333" Height="24px" BackColor="White" />

<SelectedRowStyle BorderColor="Red" BackColor="#339966" Font-Bold="True" ForeColor="White" />

<HeaderStyle BackColor="#336666" ForeColor="White" Height="30px" Font-Bold="True" />

<AlternatingRowStyle BorderWidth="1px" />

<Columns>

<asp:TemplateField HeaderText="用户">

<ItemTemplate>

<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="" Text='<%# Eval("UserInfo.Name") %>'></asp:HyperLink>

</ItemTemplate>

</asp:TemplateField>

<asp:TemplateField HeaderText="类型">

<ItemTemplate>

<asp:HyperLink ID="HyperLink2" runat="server" NavigateUrl="" Text='<%# Eval("Type.Name") %>'></asp:HyperLink>

</ItemTemplate>

</asp:TemplateField>

<asp:TemplateField HeaderText="时间">

<ItemTemplate>

<asp:HyperLink ID="HyperLink4" runat="server" NavigateUrl="" Text='<%# Eval("Time") %>'></asp:HyperLink>

</ItemTemplate>

</asp:TemplateField>

<asp:TemplateField HeaderText="备注">

<ItemTemplate>

<asp:HyperLink ID="HyperLink5" runat="server" NavigateUrl="" Text='<%# Eval("Info") %>'></asp:HyperLink>

</ItemTemplate>

</asp:TemplateField>

</Columns>

<FooterStyle BackColor="White" ForeColor="#333333" />

<PagerStyle BackColor="#336666" ForeColor="White" HorizontalAlign="Center" />

</asp:GridView>

</span>

<table border="0" cellpadding="0" cellspacing="0" bordercolorlight="#000000" bordercolordark="#ffffff">

<tr>

<td align="center" nowrap style="height: 25px; width: 601px;">

共有<asp:Label ID="RecordSum" runat="server" />条<asp:Label ID="PageSum" runat="server" />页结果

&nbsp;&nbsp;&nbsp;&nbsp;当前显示为第<asp:Label ID="CurrentPage" runat="server" />页&nbsp;&nbsp;&nbsp;15条/页&nbsp;&nbsp;

<asp:Label ID="LinkUp" runat="server" >上一页</asp:Label>

<asp:Label ID="Linkdown" runat="server" >下一页</asp:Label>

跳转至第<span id="SpanIndex"><asp:DropDownList ID="DownListIndex" runat="server" Width="50px">

</asp:DropDownList></span>页

</td>

</tr>

</table>

<asp:ObjectDataSource ID="DataSourceLog" runat="server" TypeName="DataLogic" SelectMethod="GetLogData">

<SelectParameters>

<asp:ControlParameter ControlID="txtOperator" DefaultValue=" " Name="strOperator" PropertyName="Text"

Type="string" />

<asp:ControlParameter ControlID="TxtStartTime" DefaultValue="1753-1-1" Name="dtStarTime"

PropertyName="Text" Type="DateTime" />

<asp:ControlParameter ControlID="TxtEndTime" DefaultValue="9999-12-31" Name="dtEndTime"

PropertyName="Text" Type="DateTime" />

<asp:ControlParameter Name="Pageid" ControlID="DownListIndex" DefaultValue="1" PropertyName="SelectedValue" Type="String" />

</SelectParameters>

</asp:ObjectDataSource>

</td>

</tr>

</table>

</div>

</form>

</body>

</html>

Default.aspx.cs

using System;

using System.Data;

using System.Configuration;

using System.Web;

using System.IO;

using System.Text;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.HtmlControls;

using System.Globalization;

public partial class _Default : System.Web.UI.Page,ICallbackEventHandler

...{

protected void Page_Load(object sender, EventArgs e)

...{

this.Submit.Attributes.Add("onclick", "QueryServer(txtOperator,TxtStartTime,TxtEndTime,1,"true");return false;");

this.DownListIndex.Attributes.Add("onchange", "QueryServer(txtOperator,TxtStartTime,TxtEndTime,this.value,"false");return false;");

}

回调分页#region 回调分页

private string serverReturn;

public string GetCallbackResult()

...{

string[] parts = serverReturn.Split('|');

//根据传递的方法名进行调用,并传递相应的参数,目前只支持一个参数

return (string)GetType().GetMethod(parts[0]).Invoke(this, new object[] ...{ parts[1] });

}

public void RaiseCallbackEvent(string eventArgument)

...{

serverReturn = eventArgument;

}

/**//// <summary>

/// 根据从客户端传来的值,对GridView的内容进行更新,并将更新后的GridView的html返回

/// </summary>

/// <param name="arg"></param>

/// <returns></returns>

public string ServerMethodQuery(string arg)

...{

Logs.DataSourceID = "DataSourceLog";

string[] arrayArg = arg.Split('$');

this.txtOperator.Text = arrayArg[0];

this.TxtStartTime.Text= arrayArg[1];

this.TxtEndTime.Text = arrayArg[2];

intialPageSelect();

this.DownListIndex.SelectedValue = arrayArg[3];

Logs.DataBind();

//传入客户端字符串,并用"$"分割

StringBuilder strHtml = new StringBuilder();

strHtml.Append(RenderControl(Logs));

strHtml.Append("$");

strHtml.Append(DataLogic.recordSum.ToString());

strHtml.Append("$");

strHtml.Append(Convert.ToString(DataLogic.recordSum / DataAccess.RowsPerPage + 1));

strHtml.Append("$");

strHtml.Append(arrayArg[3]);

if (arrayArg[4] == "true")

...{

strHtml.Append("$");

intialPageSelect();

strHtml.Append(RenderControl(DownListIndex));

}

return strHtml.ToString();

}

private string RenderControl(Control control)

...{

StringWriter writer1 = new StringWriter(CultureInfo.InvariantCulture);

HtmlTextWriter writer2 = new HtmlTextWriter(writer1);

control.RenderControl(writer2);

writer2.Flush();

writer2.Close();

return writer1.ToString();

}

/**//// <summary>

/// 初始化页下拉单

/// </summary>

private void intialPageSelect()

...{

DownListIndex.Items.Clear();

for (int i = 0; i < (DataLogic.recordSum / DataAccess.RowsPerPage + 1); i++)

...{

this.DownListIndex.Items.Add(Convert.ToString(i + 1));

}

}

#endregion

}

如有错误,欢迎指正!

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有