我最近开始使用ASP.Net和Telerik的RadGrid,但遇到了一个问题:
我的RadGrid对象位于Page对象(具有脚本管理器)中的自定义控件对象中的UserControl对象中。
我在自定义控件中有几个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 Grid。我有一个有4行的网格,其中3行在第1页,最后一行在第2页。 当我点击第2页时,一切都按预期发生。页面按钮的样式更改,第1页的行被删除,第2页的行添加到网格中。大!接下来发生的是我不明白的事情:
再次单击第1页时,第2页按钮的样式不会改变(因此它仍然好像被点击一样)并且第2行和第3行出现在网格上,但第一行是打开的行第2页。
当加载第1页时,似乎第2页没有清除,但我不知道为什么或如何这样做。任何人都对我正在做错的事情有任何想法?
真的很感谢你的帮助。
干杯,
罗布
答案 0 :(得分:1)
我确定你现在已经弄明白了,但是我想知道这是否是没有使用网格数据源设置NeedDataSource属性的副作用?
将其添加到前端的RadGrid控件上。
OnNeedDataSource = “radGrid_NeedDataSource”
并在后面的代码中处理它。
protected void radGrid_NeedDataSource(object sender, GridNeedDataSourceEventArgs e){ view.RadGrid.DataSource = gridData; }
答案 1 :(得分:0)
加载时,您无需向网格提供数据集。在需要时,使用您在设计中设置的DataSourceID检索数据集。
删除“view.DataSource = dataSet;”和重新绑定功能,一切都应该按预期工作。