Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASPxGridView数据表缓存_C#_Asp.net_Devexpress - Fatal编程技术网

C# ASPxGridView数据表缓存

C# ASPxGridView数据表缓存,c#,asp.net,devexpress,C#,Asp.net,Devexpress,我将GridView的源代码设置为存储过程的结果,基本上是datatable ASPxGridView1.DataSource = dt1; ASPxGridView1.DataBind(); 这是在点击按钮时发生的。在第一步,它是可以的,但当我尝试排序、筛选或转到下一页的结果时,gridview是空的,我必须单击按钮(显然是调用DataBind)来查看结果 所以,我的问题是,如何以某种方式从存储过程中缓存数据表,这样我就不需要在每次排序或页面更改时绑定数据 谢谢。使用ViewState 第1

我将GridView的源代码设置为存储过程的结果,基本上是datatable

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行怎么办?在会议上储存是一种好的做法吗?