2012-04-23 2 views
0

Я использую элемент управления RadGrid на своем веб-сайте и включаю пейджинг для radgrid, и я отслеживаю его активность на sql-профайлере, и я знаю, что данные из лучевой выборки для каждого пейджинга, а затем отображают данные для текущей страницы ,использование пейджинга для Telerik Rad grid contorl

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 время. –

ответ

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 каждый раз, когда вы меняете страницу он будет извлекать только записи, которые ему нужны для текущей страницы. Это на самом деле одно из преимуществ пейджинга. Если вы хотите получить данные только при первой загрузке страницы, вам нужно будет сохранить все данные через каждый последующий ответ.

Я понимаю ваше желание минимизировать соединения с базой данных, но если у вас достаточно записей, требующих подкачки, вам, вероятно, лучше не разрешать пейджинг работать так, как было разработано, а не пытаться хранить весь набор данных на сервере или в ViewState , Также стоит подумать, почему вы пытаетесь избежать базы данных. Это слишком медленно? Вы можете оптимизировать индексы базы данных, оценить свою структуру или просмотреть кеширование.

Однако, если это то, что вы действительно хотите сделать, и вы понимаете риски, вы можете изучить использование объекта Cache, как описано here.

Например:

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 не подходит для этого. В-третьих, Cache занимает место в памяти, поэтому, если вы храните в нем большие наборы данных, ваше приложение будет страдать.

+0

Вы правы в отношении pagging, и это так хорошо, когда у нас много записей. Но когда страница Grid меняет профайлер, покажите мне Tsql, что я хочу, чтобы все данные были записаны вместо текущей записи. Я думаю, это перенесите все данные на страницу, а затем отобразите запись страниц сети.(для каждого профайлера страницы показывайте мне «Выберите * из продуктов») –

Смежные вопросы