#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.
Когда я нажимаю на страницу 2, все происходит так, как ожидалось. Стиль кнопок страницы меняется, и строки со страницы 1 удаляются, а строка со страницы 2 добавляется в сетку. Отлично! Что происходит дальше, я не понимаю:
При повторном нажатии на страницу 1 стиль кнопки страницы 2 не меняется (поэтому она по-прежнему выглядит так, как если бы она была нажата), и в сетке появляются строки 2 и 3, но первая строка — это строка, которая была на странице 2.
кажется, что страница 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;» и функция повторной привязки и все должно работать так, как ожидалось.