Подкачка страниц Telerik RadGrid — дублирование записей и залипание кнопок

#asp.net #telerik #radgrid

#asp.net #telerik #radgrid

Вопрос:

Недавно я начал использовать ASP.Net и RadGrid от Telerik столкнулись с проблемой:

Мой объект RadGrid находится внутри объекта UserControl внутри пользовательского объекта управления внутри объекта страницы (у которого есть менеджер сценариев).

У меня есть несколько пользовательских элементов управления в указанном пользовательском элементе управления, каждый из которых содержит разметку для объекта RadGrid, как показано ниже:

 <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="AreaListRadGrid.ascx.cs" Inherits="WebControls.AreaListRadGrid" %>
<%@ Register TagPrefix="telerik" Namespace="Telerik.Web.UI" assembly="Telerik.Web.UI" %>

<telerik:RadAjaxPanel runat="server" ID="radAjaxPanel" 
            EnableAJAX="true" LoadingPanelID="radAjaxLoadingPanel">
    <telerik:RadGrid AllowPaging="true" AutoGenerateColumns="false" DataSourceID="gridData" EnableViewState="true" GridLines="None" ID="radGrid" runat="server">
        <PagerStyle Mode="NumericPages" />
        <MasterTableView>
            <Columns>
                <telerik:GridBoundColumn DataField="ColA" HeaderText="A" />
                <telerik:GridBoundColumn DataField="ColB" HeaderText="B" />
                <telerik:GridBoundColumn DataField="ColC" HeaderText="C" />
                <telerik:GridBoundColumn DataField="ColD" HeaderText="D" />
                <telerik:GridBoundColumn DataField="ColE" HeaderText="E" />
            </Columns>
        </MasterTableView>
    </telerik:RadGrid>
</telerik:RadAjaxPanel>

 <asp:ObjectDataSource  ID="gridData" runat="server"
                        SelectMethod="GetData"
                        SelectCountMethod="GetDataCount"
                        OnObjectCreating="dataObjectCreating"
                        TypeName="AreaListRadGrid">
</asp:ObjectDataSource>

<telerik:RadAjaxLoadingPanel runat="server" ID="radAjaxLoadingPanel">
        Loading please wait....
</telerik:RadAjaxLoadingPanel>
  

Я изменил имена столбцов и пространств имен на что-то, не относящееся к конкретному проекту, но сетка загружается.

Поскольку он находится в пользовательском элементе управления, он создается следующим образом:

 var view = (AreaListRadGrid)this.TemplateControl.LoadControl(".\WebControls\AreaListRadGrid.ascx");
view.DataSource = dataSet;
areaCenterMiddle.Controls.Add(view);
view.RadGrid.Rebind();
  

dataSet переменная имеет тип System.Data.DataSet .

Итак, когда я запускаю этот веб-сайт, появляется сетка Rad. У меня есть сетка с 4 строками, 3 из которых находятся на странице 1, а последняя строка — на странице 2. начальная radgrid
после страницы 2 нажмитеКогда я нажимаю на страницу 2, все происходит так, как ожидалось. Стиль кнопок страницы меняется, и строки со страницы 1 удаляются, а строка со страницы 2 добавляется в сетку. Отлично! Что происходит дальше, я не понимаю:

При повторном нажатии на страницу 1 стиль кнопки страницы 2 не меняется (поэтому она по-прежнему выглядит так, как если бы она была нажата), и в сетке появляются строки 2 и 3, но первая строка — это строка, которая была на странице 2.

повторный визит на страницу 1

кажется, что страница 2 не очищается при загрузке страницы 1, я не уверен, почему и как это происходит. У кого-нибудь есть идеи, что я делаю неправильно?

Был бы очень признателен за вашу помощь.

Приветствия,

Роб

Комментарии:

1. Действительно хорошо сформулированный вопрос. Вот какими должны быть вопросы.

2. Есть ли возможность опубликовать сам элемент управления? Я начал настраивать проект для устранения неполадок, но понял, что нет никакого способа, если я не могу создать экземпляр объекта.

3. Вы сталкиваетесь с этой проблемой во всех браузерах или только в каком-либо конкретном браузере?

4. Можете ли вы попробовать выполнить повторную привязку к событию изменения свойств страницы сетки

5. Проблема исчезнет, если вы удалите сетку из RadAjaxPanel? Кроме того, с тех пор, как прошло некоторое время, вы нашли решение, которое вы можете опубликовать здесь, чтобы поделиться с сообществом?

Ответ №1:

Я уверен, что вы уже разобрались с этим, но мне интересно, не является ли это побочным эффектом отсутствия свойства NeedDataSource с помощью grid datasource?

добавьте это в элемент управления RadGrid на интерфейсе.

OnNeedDataSource=»radGrid_NeedDataSource»

и обработайте это в коде.

защищенный void radGrid_NeedDataSource(отправитель объекта, GridNeedDataSourceEventArgs e) { просмотр.RadGrid.DataSource = gridData; }

Комментарии:

1. Я считаю, что это должно сработать! NeedDataSource выполняет всю необходимую магию.

Ответ №2:

Вам не нужно предоставлять набор данных в сетку при загрузке. При необходимости набор данных извлекается с использованием DataSourceID, который вы установили в design.

Удалить «просмотр.DataSource = DataSet;» и функция повторной привязки и все должно работать так, как ожидалось.