0

我在 RadGrid 中显示数据时遇到问题。数据源中有数据,但 RadGrid 不显示它。

asp代码:

<telerik:RadGrid ID="RadGrid1" runat="server" Width="980px" 
EnableEmbeddedSkins="false"
AllowAutomaticDeletes="false" 
AllowAutomaticInserts="false"
AllowAutomaticUpdates="true" 
AllowPaging="true" 
AutoGenerateColumns="False"              
AutoGenerateDeleteColumn="false" 
AutoGenerateEditColumn="false" 
ItemStyle-Height="20px" 
ClientSettings-ActiveRowIndex="true"
EnableViewState = "false" 
OnNeedDataSource = "RadGrid1_NeedDataSource">
<MasterTableView AllowSorting="true" PageSize="10" Width="980px" EnableViewState="true"
    RetrieveAllDataFields="false">
    <NoRecordsTemplate>There is no data available.</NoRecordsTemplate>

    <ExpandCollapseColumn FilterControlAltText="Filter ExpandColumn column"></ExpandCollapseColumn>
    <Columns>                    
        <telerik:GridBoundColumn DataField="TripId" HeaderText="Trip ID" SortExpression="TripID" UniqueName="TripId"  
            SortAscImageUrl="SortAsc.gif" SortDescImageUrl="SortDesc.gif">
        </telerik:GridBoundColumn>
        <telerik:GridBoundColumn DataField="TripLegId" HeaderText="TripLegId" SortExpression="TripLegId" UniqueName="TripLegId" 
            SortAscImageUrl="SortAsc.gif" SortDescImageUrl="SortDesc.gif">
        </telerik:GridBoundColumn>
        <telerik:GridBoundColumn DataField="MemberFirstName" HeaderText="Member First Name" SortExpression="MemberFirstName"
            UniqueName="MemberFirstName" 
            SortAscImageUrl="SortAsc.gif" SortDescImageUrl="SortDesc.gif">
        </telerik:GridBoundColumn>
    </Columns>

    <PagerStyle FirstPageImageUrl="PagingFirst.gif" 
        LastPageImageUrl="PagingLast.gif" NextPageImageUrl="PagingNext.gif" 
        PrevPageImageUrl="PagingPrev.gif" />
    <CommandItemStyle Font-Bold="True" ForeColor="#0066CC" />
</MasterTableView>
<ClientSettings>
    <Selecting AllowRowSelect="true" />
</ClientSettings>
<FilterMenu EnableImageSprites="False"></FilterMenu>            
</telerik:RadGrid>  

.cs 代码

public void btnSearch_Clicked(object sender, EventArgs e)
{
    try
    {
        RadGrid1.DataSource = GetTripsDataSet();
        RadGrid1.DataBind();
        this.RadGrid1.CurrentPageIndex = 0;
        ViewState["newset"] = "new";
    }
    catch (Exception ex)
    {
        string errMessage = ex.Source.ToString();
    }
}  

protected void RadGrid1_NeedDataSource(object sender, GridNeedDataSourceEventArgs e)
{
    if (ViewState["newset"] == null) return;

    if (Session["gridTrips"] != null)
    {
        DataTable dt = (DataTable)Session["griTrips"];
        if (dt.Rows.Count > 0)
        {
            this.RadGrid1.DataSource = dt;
        }
    }
}
4

1 回答 1

1

您只需要重新绑定网格,它会自动调用网格的 NeedDataSource 事件。

public void btnSearch_Clicked(object sender, EventArgs e)
{
    try
    {
        this.RadGrid1.Rebind();
        this.RadGrid1.CurrentPageIndex = 0;
        ViewState["newset"] = "new";
    }
    catch (Exception ex)
    {
        string errMessage = ex.Source.ToString();
    }
}  

protected void RadGrid1_NeedDataSource(object sender, GridNeedDataSourceEventArgs e)
{
    if (ViewState["newset"] == null) return;

    if (Session["gridTrips"] != null)
    {
        DataTable dt = (DataTable)Session["griTrips"];
        if (dt.Rows.Count > 0)
        {
            this.RadGrid1.DataSource = dt;
            this.RadGrid1.VirtualItemCount = dt.Rows.Count;
        }
    }
}

设置网格的VirtualItemCount属性也很好,尤其是在您使用自定义分页时。来自该属性的 Telerik RadGrid 元数据:

摘要:获取或设置一个值,表示使用自定义分页时数据源中的项目总数。因此,网格“理解”数据源包含指定数量的记录,并且它应该一次只获取其中的一部分以执行请求的操作。

备注:如果您设置的值大于实际项目数,RadGrid 将显示所有可用项目以及超出实际数量的项目的空白页面(或您设置的任何其他内容)。例如,您有一个包含 9'000 个项目的数据源,并且您将 VirtualItemCount 设置为 10'000。如果您的页面大小为 1000,则网格将呈现 10 页,最后一页将为空(如果您正在使用,则使用 NoRecordsTemplate)。

于 2014-07-23T18:51:21.873 回答