SPGridView 研究笔记 Part 2 - 排序与过滤

本文介绍如何使用SPGridView实现数据排序和过滤功能。通过设置AllowSorting和AllowFiltering属性,结合SortExpression和FilteredDataSourcePropertyName等配置,实现客户端和服务端的数据处理。

SPGridView的排序与GridView是相同的. 我们先看看SPGridView默认排序功能的效果.
P2-1

启用排序功能先把将SPGridView的AllowSorting属性设置成true, 然后给需要排序的列设置SortExpression属性. 这样就可以效果页面内的排序, 就是只能把当前在SPGridView里显示的数据排序一下.
如果需要从数据源那端排序, 就得先准备好一个有排序表达式参数的取数据方法, 之前我们准备的NorthwindData.cs里已经有了一个GetProductList(string sortExpression)方法, 我们只需要再把ObjectDataSource的SortParameterName设置成与那个参数名字一置, "sortExpression"就行了.

 

过滤是SPGridView新增的功能, 效果很酷.
P2-2  P2-3
Filter菜单中装载了SPGridView中全部的Category, 选中一个Category后SPGridView就会只显示选中Category的数据, 再点开Category菜单就变成右边图那样了.
注: 最上面两个排序是Filter菜单自己带的, 即使你把SPGridView的AllowSorting设置成false并把Category列的SortExpression去掉, 这两个排序还是可以用. 而且这两个排序会先尝试利用ObjectDataSource的排序功能, 不行就在SPGridView页内排序. 呵呵. 怪怪的.

要启用SPGridView的过滤功能, 先要把SPGridView的AllowFiltering设为true, 再使用FilterDataFields属性设置要启用过滤菜单的列, 这里我们不需给前面ProductId和ProductName两个列启用过滤功能, 但是在FilterDataFields里我们还是得用逗号来充当这2个列的占位符.

<cc1:SPGridView ID="SPGridView1" runat="server" AutoGenerateColumns="False" DataSourceID="ObjectDataSource1" FilterDataFields=",,CategoryName" AllowFiltering="true">
这样就能得到上面2张图的效果了.  当然光这样还不能真正过滤数据. 我们还需要再设置2个属性.
<cc1:SPGridView ID="SPGridView1" runat="server" AutoGenerateColumns="False" DataSourceID="ObjectDataSource1" FilterDataFields=",,CategoryName" AllowFiltering="true" FilteredDataSourcePropertyFormat="{1} = '{0}'" FilteredDataSourcePropertyName="FilterExpression">

其中FilteredDataSourcePropertyName是指SPGridView调用的DataSource控件用于过滤数据的属性名称, 我们现在用的是ObjectDataSource控件, 它的FilterExpression属性是用来处理过滤的. 而FilteredDataSourcePropertyFormat里的"{1} = '{0}'"就是用来给FilterExpression赋值用的. {1}表示需要过滤的列名CategoryName, {0} 表示被选中的过滤条件 Confections (见上面右图). 当选择 Confections 时, SPGridView就会给ObjectDataSource的FilterExpression属性传入 CategoryName = 'Confections' 从而达到过滤效果.

注: 只有当SPGridView指定了一个DataSource控件时过滤才会有效, 使用DataView作数据源去设置它的RowFilter是不行的. 详情见SPGridView源代码中的DoSortPostBackEventProcessing方法.

 

完整代码:

<%@ Page Language="C#" MasterPageFile="~masterurl/Default.Master" %>
<%@ Register Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" Namespace="Microsoft.SharePoint.WebControls" TagPrefix="cc1" %>
 
<asp:Content ID="Content3" ContentPlaceHolderID="PlaceHolderAdditionalPageHead" runat="server">

    asp:Content>
<asp:Content ID="Content1" ContentPlaceHolderID="PlaceHolderPageTitleInTitleArea" runat="server">
    SPGridView Demo: Part 2 - Sorting and Filtering

    asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="PlaceHolderMain" runat="server">
    
    
    <cc1:SPGridView ID="SPGridView1" runat="server" AutoGenerateColumns="False" DataSourceID="ObjectDataSource1" FilterDataFields=",,CategoryName" AllowFiltering="true" FilteredDataSourcePropertyFormat="{1} = '{0}'" FilteredDataSourcePropertyName="FilterExpression" AllowSorting="true">
        <Columns>
            <cc1:SPBoundField DataField="ProductId" HeaderText="Product ID" SortExpression="ProductId">
            
    cc1:SPBoundField>
            <cc1:SPBoundField DataField="ProductName" HeaderText="Product Name" SortExpression="ProductName" />
            <cc1:SPBoundField DataField="CategoryName" HeaderText="Category" SortExpression="CategoryName">
            
    cc1:SPBoundField>
            <asp:BoundField DataField="UnitPrice" DataFormatString="${0:F2}" HeaderText="Unit Price" SortExpression="UnitPrice" />
            <asp:TemplateField HeaderText="Orderable" SortExpression="Discontinued">
            <itemtemplate>
                <asp:Label id="lblDiscontinued" runat="server" text='<%# Convert.ToBoolean(Eval("Discontinued")) ? "Yes" : "No" %>'>
    asp:Label>

    itemtemplate>
            
    asp:TemplateField>
        
    Columns>
    
    cc1:SPGridView>
    
    
        
    
    
    <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="GetProductList" SortParameterName="sortExpression" TypeName="SPGridView_Demo.NorthwindData">
    asp:ObjectDataSource>
    
    

    asp:Content>
在数字化进程中,人工智能技术日益成为科技革新的关键驱动力,其中强化学习作为机器学习的重要分支,在解决复杂控制任务方面展现出显著潜力。本文聚焦于深度确定性策略梯度(DDPG)方法在移动机器人自主导航领域的应用研究。该算法通过构建双神经网络架构,有效克服了传统Q-learning在连续动作空间中的局限性,为高维环境下的决策问题提供了创新解决方案。 DDPG算法的核心架构包含策略网络价值评估网络两大组件。策略网络负责根据环境状态生成连续动作指令,通过梯度上升方法不断优化策略以获取最大长期回报;价值评估网络则采用深度神经网络对状态-动作对的期望累积奖励进行量化估计,为策略优化提供方向性指导。这种双网络协作机制确保了算法在复杂环境中的决策精度。 为提升算法稳定性,DDPG引入了多项关键技术:经验回放机制通过建立数据缓冲区存储历史交互记录,采用随机采样方式打破样本间的时序关联性;目标网络系统通过参数软更新策略,以θ_target = τ·θ_current + (1-τ)·θ_target的更新方式确保训练过程的平稳性;探索噪声注入技术则通过在动作输出中添加随机扰动,维持了策略探索利用的平衡。 在具体实施过程中,研究需依次完成以下关键步骤:首先建立符合马尔科夫决策过程的环境模型,精确描述机器人的运动学特性环境动力学;随后设计深度神经网络结构,确定各层神经元数量、激活函数类型及参数优化算法;接着进行超参数配置,包括学习速率、批量采样规模、目标网络更新系数等关键数值的设定;最后构建完整的训练验证流程,通过周期性测试评估导航成功率、路径规划效率、障碍规避能力等核心指标。 该研究方法不仅为移动机器人自主导航提供了可靠的技术方案,其算法框架还可扩展应用于工业自动化、智能交通等需要精密控制的领域,具有重要的工程实践价值理论借鉴意义。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值