2012-04-23 10 views
0

私は自分のWebサイトでRadGridコントロールを使用しています。私はradgridのページングを有効にしています。これはSQLプロファイラでの活動を監視していますので、各ページングのデータを取得し、 。Telerik Radグリッドコントロールのページングを使用

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を使用しています。

+2

あなたの質問は何ですか? – SouthShoreAK

+0

は私のコードが間違っていますか?なぜ私のページを変更するたびにデータベースからデータを読み込むのですか? –

+0

私はradgridがデータを一度読んで、それをevry timeとする何かをすることができますか? –

答えて

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 '[email protected]+' '+ @Direction + ') as RowNum 
          FROM '[email protected]+' order by '[email protected]+' '[email protected] +') 
          as DerivedTableName WHERE RowNum BETWEEN '+ 
          str(@PageIndex * @PageSize) +' AND'+ 
          str((@PageIndex* @PageSize) [email protected] -1) 

        exec(@SQLText) 
        END 
2

ページングをRadGridに実装すると、ページを変更するたびに現在のページのために必要なレコードのみを取得します。これは実際にページングの利点の1つです。ページが初めて読み込まれたときにのみデータを取得したい場合は、のデータセット全体をその後のポストバックを通じてすべて保持する必要があります。

私はデータベース接続を最小限に抑えたいと思っていますが、ページングが必要なレコードが十分ある場合は、サーバーまたはViewStateでデータセット全体を保持しようとするよりも、 。なぜあなたがデータベースを避けようとしているのかを考える価値があるかもしれません。それは遅すぎますか?データベースのインデックスを最適化したり、構造を評価したり、キャッシュを調べたりすることができます。

しかし、これが本当にやりたいことであり、リスクを理解している場合は、hereのように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; 
} 

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

私は問題を解決するために、このストアドプロシージャを使用
+0

私は多くのレコードを持っているときは、ページングとそのように良いです。しかし、グリッドページがプロファイラーを変更すると私は現在のページrecord.iの代わりにすべてのデータをキャプチャするTsqlを表示するページ上のすべてのデータを転送し、currnetページのレコードを表示します。(各ページのプロファイラで「Select * from Products」と表示されます) –

関連する問題