C# ASPxGridView数据表缓存
我将GridView的源代码设置为存储过程的结果,基本上是datatableC# ASPxGridView数据表缓存,c#,asp.net,devexpress,C#,Asp.net,Devexpress,我将GridView的源代码设置为存储过程的结果,基本上是datatable ASPxGridView1.DataSource = dt1; ASPxGridView1.DataBind(); 这是在点击按钮时发生的。在第一步,它是可以的,但当我尝试排序、筛选或转到下一页的结果时,gridview是空的,我必须单击按钮(显然是调用DataBind)来查看结果 所以,我的问题是,如何以某种方式从存储过程中缓存数据表,这样我就不需要在每次排序或页面更改时绑定数据 谢谢。使用ViewState 第1
ASPxGridView1.DataSource = dt1;
ASPxGridView1.DataBind();
这是在点击按钮时发生的。在第一步,它是可以的,但当我尝试排序、筛选或转到下一页的结果时,gridview是空的,我必须单击按钮(显然是调用DataBind)来查看结果
所以,我的问题是,如何以某种方式从存储过程中缓存数据表,这样我就不需要在每次排序或页面更改时绑定数据
谢谢。使用ViewState 第1步:
GridView1.DataSource = ds;
ViewState["itemsetPending"] = ds;
GridView1.DataBind();
第二步:
protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
{
DataSet m_DataTable = (DataSet)ViewState["itemsetPending"];
if (m_DataTable != null)
{
DataView m_dataview = new DataView(m_DataTable.Tables[0]);
if (Convert.ToInt32(ViewState["m_sort"]) == 0)
{
m_dataview.Sort = e.SortExpression + " " + ConvertSortDirectionToSql(SortDirection.Descending);
ViewState["m_sort"] = 1;
}
else
{
m_dataview.Sort = e.SortExpression + " " + ConvertSortDirectionToSql(e.SortDirection);
ViewState["m_sort"] = 0;
}
GridView1.DataSource = m_dataview;
GridView1.DataBind();
}
}
在这里,我将存储过程中的数据填充到Dataset中,并分配到ViewState中。请尝试一下
private string ConvertSortDirectionToSql(SortDirection sortDirection)
{
string newSortDirection = String.Empty;
switch (sortDirection)
{
case SortDirection.Ascending:
newSortDirection = "ASC";
break;
case SortDirection.Descending:
newSortDirection = "DESC";
break;
}
return newSortDirection;
}
使用视图状态 第1步:
GridView1.DataSource = ds;
ViewState["itemsetPending"] = ds;
GridView1.DataBind();
第二步:
protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
{
DataSet m_DataTable = (DataSet)ViewState["itemsetPending"];
if (m_DataTable != null)
{
DataView m_dataview = new DataView(m_DataTable.Tables[0]);
if (Convert.ToInt32(ViewState["m_sort"]) == 0)
{
m_dataview.Sort = e.SortExpression + " " + ConvertSortDirectionToSql(SortDirection.Descending);
ViewState["m_sort"] = 1;
}
else
{
m_dataview.Sort = e.SortExpression + " " + ConvertSortDirectionToSql(e.SortDirection);
ViewState["m_sort"] = 0;
}
GridView1.DataSource = m_dataview;
GridView1.DataBind();
}
}
在这里,我将存储过程中的数据填充到Dataset中,并分配到ViewState中。请尝试一下
private string ConvertSortDirectionToSql(SortDirection sortDirection)
{
string newSortDirection = String.Empty;
switch (sortDirection)
{
case SortDirection.Ascending:
newSortDirection = "ASC";
break;
case SortDirection.Descending:
newSortDirection = "DESC";
break;
}
return newSortDirection;
}
通常,在运行时更新
ASPxGridView
或WebChartControl
数据时,不会自动缓存此信息
因此,您必须使用Page\u Init
事件处理程序在每次请求服务器时将其提供给控件
为了提高性能,您可以将数据保存到会话/缓存中
变数
有关您的问题和知识库,请查看以下知识库://在会话中缓存数据表,以避免每次回发时多个数据库命中
DataTable GetTable() {
//You can store a DataTable in the session state
DataTable table = Session["Table"] as DataTable;
if (table == null) {
table = new DataTable();
table.Columns.Add("id", typeof(int));
table.Columns.Add("data", typeof(String));
for (int n = 0; n < 100; n++) {
table.Rows.Add(n, "row" + n.ToString());
}
Session["Table"] = table;
}
//Otherwise you have to create a DataTable instance on every request:
//DataTable table = new DataTable();
//table.Columns.Add("id", typeof(int));
//table.Columns.Add("data", typeof(String));
//for(int n = 0; n < 100; n++) {
// table.Rows.Add(n, "row" + n.ToString());
//}
return table;
}
DataTable GetTable(){
//可以在会话状态下存储数据表
DataTable=会话[“表”]作为DataTable;
如果(表==null){
table=新数据表();
表.列.添加(“id”,类型(int));
表.列.添加(“数据”,类型(字符串));
对于(int n=0;n<100;n++){
table.Rows.Add(n,“row”+n.ToString());
}
会话[“表”]=表;
}
//否则,您必须在每个请求上创建DataTable实例:
//DataTable=新的DataTable();
//表.列.添加(“id”,类型(int));
//表.列.添加(“数据”,类型(字符串));
//对于(int n=0;n<100;n++){
//table.Rows.Add(n,“row”+n.ToString());
//}
返回表;
}
提高DevExpress GridView控件性能的参考链接:通常,在运行时更新
ASPxGridView
或WebChartControl
数据时,不会自动缓存此信息
因此,您必须使用Page\u Init
事件处理程序在每次请求服务器时将其提供给控件
为了提高性能,您可以将数据保存到会话/缓存中
变数
有关您的问题和知识库,请查看以下知识库://在会话中缓存数据表,以避免每次回发时多个数据库命中
DataTable GetTable() {
//You can store a DataTable in the session state
DataTable table = Session["Table"] as DataTable;
if (table == null) {
table = new DataTable();
table.Columns.Add("id", typeof(int));
table.Columns.Add("data", typeof(String));
for (int n = 0; n < 100; n++) {
table.Rows.Add(n, "row" + n.ToString());
}
Session["Table"] = table;
}
//Otherwise you have to create a DataTable instance on every request:
//DataTable table = new DataTable();
//table.Columns.Add("id", typeof(int));
//table.Columns.Add("data", typeof(String));
//for(int n = 0; n < 100; n++) {
// table.Rows.Add(n, "row" + n.ToString());
//}
return table;
}
DataTable GetTable(){
//可以在会话状态下存储数据表
DataTable=会话[“表”]作为DataTable;
如果(表==null){
table=新数据表();
表.列.添加(“id”,类型(int));
表.列.添加(“数据”,类型(字符串));
对于(int n=0;n<100;n++){
table.Rows.Add(n,“row”+n.ToString());
}
会话[“表”]=表;
}
//否则,您必须在每个请求上创建DataTable实例:
//DataTable=新的DataTable();
//表.列.添加(“id”,类型(int));
//表.列.添加(“数据”,类型(字符串));
//对于(int n=0;n<100;n++){
//table.Rows.Add(n,“row”+n.ToString());
//}
返回表;
}
提高DevExpress GridView控件性能的参考链接:您可以使用
AfterPerformCallback
:
protected void gridSchedule_AfterPerformCallback(object sender,
DevExpress.Web.ASPxGridView.ASPxGridViewAfterPerformCallbackEventArgs e)
{
LoadGrid(gridSchedule);
}
您可以使用
AfterPerformCallback
:
protected void gridSchedule_AfterPerformCallback(object sender,
DevExpress.Web.ASPxGridView.ASPxGridViewAfterPerformCallbackEventArgs e)
{
LoadGrid(gridSchedule);
}
你查过MSDN了吗?你查过MSDN了吗?漂亮的解决方案。非常感谢你!如果我的Datatable包含超过5000行怎么办?这是一个很好的做法,存储在会议?美丽的解决方案。非常感谢你!如果我的Datatable包含超过5000行怎么办?在会议上储存是一种好的做法吗?