0

Web サイトで RadGrid コントロールを使用し、radgrid のページングを有効にして、SQL プロファイラーでそのアクティビティを監視し、radgrid がページングごとにデータを取得してから、現在のページのデータを表示することを知っています。

 DataSet obj_Dataset = new DataSet(); //  is global

これは私がこれを書く私のコードですPage_Load:

protected void Page_Load(object sender, EventArgs e)
    {
        SqlConnection obj_SqlConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["NorthwindConection"].ToString());
        SqlCommand obj_sqlCommand = new SqlCommand();
        obj_sqlCommand.CommandText = "select ProductID,ProductName,CategoryID from products";
        obj_sqlCommand.CommandType = CommandType.Text;
        obj_sqlCommand.Connection = obj_SqlConnection;

        SqlDataAdapter obj_DataAdapter = new SqlDataAdapter(obj_sqlCommand);
        obj_SqlConnection.Open();
        obj_DataAdapter.Fill(obj_Dataset, "Products");
        obj_DataAdapter.Dispose();
        obj_sqlCommand.Dispose();
        obj_SqlConnection.Close();
    }

これは私のコードですRadGrid1_NeedDataSource

 protected void RadGrid1_NeedDataSource(object sender, Telerik.Web.UI.GridNeedDataSourceEventArgs e)
    {

        RadGrid1.DataSource = obj_Dataset.Tables["Products"];

    }

ASP.net 2010 と Sqlserver 2008 を使用しています。

4

2 に答える 2

2

RadGrid にページングを実装すると、ページを変更するたびに、現在のページに必要なレコードのみが取得されます。これは、ページングの利点の 1 つです。ページが最初に読み込まれたときにのみデータを取得する場合は、その後のポストバックごとにデータ セット全体を永続化する必要があります。

データベース接続を最小限に抑えたいというご要望は理解していますが、ページングが必要なだけのレコードがある場合は、データセット全体をサーバーまたは ViewState に保持しようとするよりも、ページングを設計どおりに機能させた方がよいでしょう。また、データベースを回避しようとしている理由を検討する価値があるかもしれません。遅すぎませんか?データベースのインデックスを最適化したり、構造を評価したり、キャッシュを調べたりすることが必要になる場合があります。

ただし、これが本当にやりたいことであり、リスクを理解している場合は、こちらで説明されているように Cache オブジェクトの使用を検討できます。

例えば:

protected void RadGrid1_NeedDataSource(object sender, Telerik.Web.UI.GridNeedDataSourceEventArgs e)
{
    var products = Cache["products"] as DataTable;
    if(products == null)
    {
       products = obj_Dataset.Tables["Products"];
       Cache.Insert("products", products , null, DateTime.Now.AddHours(6), TimeSpan.Zero);
    }

    RadGrid1.DataSource = products;
}

このアプローチについて知っておくべきことがいくつかあります。1Cacheつ目は、アプリケーションに対してグローバルであるため、格納されているデータCacheはすべてのユーザーに対して同じである必要があります。次に、Cacheは自動的に更新されないため、データを更新する場合はCache、コード内を明示的に更新する必要があります。頻繁に変更されるデータがある場合Cacheは、適切な場所ではありません。第 3 に、Cacheメモリ内のスペースを占有するため、大きなデータ セットをそこに保存すると、アプリケーションが影響を受けます。

于 2012-04-23T18:56:13.527 に答える
1

私はこのストアド プロシージャを使用して問題を解決します: パラメータは radgrid プロパティによって埋められます:

     Create PROCEDURE  [dbo].[CastumPaging]
                    (
                       @SqlTableName nvarchar(100),
                       @OrderColumn nvarchar (30),
                       @Direction nvarchar(5),
                       @PageIndex int,
                       @PageSize int
                    )
                    AS
                    BEGIN
                    declare @SQLText nvarchar(500)

                     set @SQLText = 'SELECT * FROM (SELECT top 100 PERCENT * , ROW_NUMBER() 
                          OVER(ORDER BY '+@OrderColumn+' '+ @Direction + ' ) as RowNum 
                          FROM '+@SqlTableName+'  order by '+@OrderColumn+' '+@Direction +' )
                          as DerivedTableName WHERE RowNum BETWEEN '+
                          str(@PageIndex * @PageSize) +' AND'+ 
                          str((@PageIndex* @PageSize) +@PageSize -1) 

                    exec(@SQLText)
                    END
于 2012-04-25T18:30:30.173 に答える