2. 利用FilterExpression筛选数据

在SqlDataSource中进行数据的筛选有两种方法,一是使用SelectCommand机制进行数据筛选,即在SQL语句中加入where子句。二是使用FilterExpression进行筛选。
    使用FilterExpression机制进行筛选是使用DataView对象中的筛选机制。效率不高,但比较简便。进行数据筛选只要在SqlDataSource控件中加入FilterExpression属性就可以了。如下所示:
例2:使用FilterExpression筛选数据

<asp:TextBox ID="tb_factory" Text="道恩"  runat="server"></asp:TextBox>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
               ConnectionString="<%$ ConnectionStrings:DawnEnterpriseDBConnectionString %>" 
               SelectCommand="SELECT [product_id], [product_code], [product_name], [product_factory] FROM [product_main]"
               FilterExpression="product_factory like '%{0}%'" onfiltering="SqlDataSource1_Filtering"
>
       <FilterParameters>
               <asp:ControlParameter Name="fp_pro_factory" ControlID="tb_factory" PropertyName="Text" />
        </FilterParameters>
</asp:SqlDataSource>

以上,FilterExpression中引用的参数必须指定是{0}这样的格式,引用@paramName这样的形式我试验过,好像行不通,不知道为什么。有待解释。
    以下是MSDN对FilterExpression的解释:

用于 FilterExpression 属性的语法是格式字符串样式表达式。筛选表达式语法与 Expression 属性接受的语法相同。如果将参数添加到 FilterParameters 集合中,则也可以包括格式字符串占位符。例如,可在表达式中包括 "{0}" 以替换参数值。根据 FilterParameters 集合中的参数索引替换占位符。
可以在 FilterExpression 属性中包括参数。如果参数类型为字符串类型或字符类型,则应将参数放在单引号中。如果参数是数值类型的,则不需要引号。

例3:动态取得和添加FilterExpression的参数

<script runat="server">
protected void ObjectDataSource1_Filtering(object sender, ObjectDataSourceFilteringEventArgs e)
{
    if(e.ParameterValues.count>0)
         Label1.Text = e.ParameterValues[0].ToString();
    if (Textbox1.Text == "") {
           e.ParameterValues.Clear();
           e.ParameterValues.Add("FullName", "Nancy Davolio"); 
    }
}
</script>
<asp:objectdatasource id="ObjectDataSource1" runat="server"
        selectmethod="GetAllEmployeesAsDataSet" typename="Samples.AspNet.CS.EmployeeLogic"
        filterexpression="FullName='{0}'" OnFiltering="ObjectDataSource1_Filtering">
    <filterparameters>
         <asp:formparameter name="FullName" formfield="Textbox1" defaultvalue="Nancy Davolio" />
    </filterparameters>
</asp:objectdatasource>

SqlDataSource中的FilterExpression运作的原理是通过DataView,那么,如何直接通过DataView对象进行数据的过滤呢。
例4:在程序中通过DataView进行数据的过滤

protected void Page_Load(object sender, EventArgs e)
{
    if(!IsPostBack){
        ConnectionStringSettings connSetting = WebConfigurationManager.ConnectionStrings["DawnEnterpriseDBConnectionString"];
        SqlConnection sqlConn = new SqlConnection(connSetting.ConnectionString);
        SqlDataAdapter da = new SqlDataAdapter("select * from product_class", sqlConn);
        //创建DataTable
        DataTable dt = new DataTable();
        dt.TableName = "product_class";
        da.Fill(dt);
        //创建DataView,进行过滤
        DataView dv = new DataView(dt);
        dv.RowFilter = "product_class_parent=1";
        //指定数据源
        GridView2.DataSource = dv;
        GridView2.DataBind();
    }
}

3.处理并发

SqlDataSource控件的ConficatDetection属性和OldValuesParameterFormatString属性被赋值的情况下,这两个属性会使SqlDataSource控件为每个个数据列保持此列的原始值和修改后的值,以此来解决并发的问题。
    ConficatDetection可以为以下两个值之一:
      ● CompareAllValues: 为每一列保持修改值和原始值
      ● OverwritingChanges: 将会导致SqlDataSource控件直接使用新值覆盖到数据列中
    OldValuesParameterFormatStrin属性用来为列的原始值提供唯一的名称。
示例如下:

<asp:SqlDataSource id=”srcMovies” ConflictDetection=”CompareAllValues” OldValuesParameterFormatString=”original_{0}”
        ConnectionString=”<%$ ConnectionStrings:Movies %>”
        SelectCommand=”SELECT Id,Title,Director FROM Movies”
        UpdateCommand=”UPDATE Movies SET Title=@Title, Director=@Director WHERE Id=@original_Id AND
                                 Title=@original_Title AND Director=@original_Director”
        Runat=”server” OnUpdated=”srcMovies_Updated” />

asp.net学习之再论sqlDataSource 2相关推荐

  1. asp.net学习之再论sqlDataSource

    asp.net学习之再论sqlDataSource 原文:asp.net学习之再论sqlDataSource 本节从上一节没有阐述的几个方面,再讨论一下SqlDataSource的用法及注意的事项. ...

  2. asp.net学习之再论sqlDataSource 1

    asp.net学习之再论sqlDataSource 本节从上一节没有阐述的几个方面,再讨论一下SqlDataSource的用法及注意的事项.     上一节的链接地址如下:http://www.cnb ...

  3. asp.net学习资源汇总

    名称:快速入门 地址:http://chs.gotdotnet.com/quickstart/ 描述:本站点是微软.NET技术的快速入门网站,我们不必再安装.NET Framework中的快速入门示例 ...

  4. ASP.Net学习笔记015--ASP.Net中使用Cookie

    ASP.Net学习笔记015--ASP.Net中使用Cookie 表单数据欺骗: 原理跟收到欺骗短信一样,移动信号塔[基站],伪装的移动信号塔会屏蔽移动信号,并且 在信号范围内的手机会自动切换为接收伪 ...

  5. ASP.Net学习笔记013--ViewState初探2

    ASP.Net学习笔记013--ViewState初探2 上课讲的viewstate,由于需要跟后台服务器进行传值,需要封装很多隐藏列,比如100条数据,就会有100个viewstate 如果用在一些 ...

  6. Asp.Net 学习资源列表 [转]

    转:http://blog.csdn.net/liujien/archive/2005/11/23/535225.aspx  Asp.Net 学习资源列表 名称:快速入门 地址:http://chs. ...

  7. ASP.NET学习篇之——与ASP的区别

    概述 在上一篇文章中我们将框架进行了讲解,这篇文字我们重点来学习下ASP与ASP.NET的区别. 执行效率 在讲解之前我们先来理解一下程序执行的两种方式,分别是解释性程序执行方式和编译性程序执行方式. ...

  8. ASP.net 学习路线(详细)

    ASP.net 学习路线(详细) 浏览:5632 | 更新:2013-12-13 16:33 | 标签: asp.net 百度经验:jingyan.baidu.com .net学习路线 入门篇1.   ...

  9. ASP.NETCore学习记录(一)

    ASP.NETCore学习记录(一) asp.net core介绍  Startup.cs  ConfigureServices  Configure  0. ASP.NETCore 介绍 ASP.N ...

最新文章

  1. 记 fastjson泛型转对象 第一次可以正常转,第二次就变成JSONArray 问题
  2. 201521123060 《Java程序设计》第10周学习总结
  3. 机器学习基础——实现基本的决策树
  4. mysql 8.0.19 winx64安装及修改初始密码
  5. 几何画板200个经典课件_项目制学科联动 | 金芬娥首席工作室:灵动“画板”,研修创新,协同进步...
  6. 排序算法时间复杂度和稳定性
  7. linux6安装图形化界面,centos 6.8 图形界面安装
  8. Java 算法训练 一元三次方程求解
  9. python 检测列表中是否有空值,检查python列表中是否已经存在数字
  10. Google Maps API v3:如何删除所有标记?
  11. 几点Java程序必须满足的基本规则
  12. Android 反编译Apk (Mac)
  13. MapReduce项目案例3——温度统计
  14. 平面弧长极坐标公式的疑问
  15. qq飞车鸿蒙车队,qq飞车手游鸿蒙版
  16. 基于OpenSSL,实现SM2签名数据的ASN1编码转换
  17. ARC093F Dark Horse 容斥原理+DP
  18. Titan XP值不值?一文教你如何挑选深度学习GPU
  19. Ubuntu下Linux常用命令练习作业题(1)
  20. matlab数据接口技术,Matlab与Pspice的数据接口技术

热门文章

  1. C# 自定义类型转换
  2. Resid 学习笔记1-基础命令
  3. flask笔记3-模板
  4. ActiveReports 报表应用教程 (15)---报表换肤
  5. ASP.NET Forms权限验证
  6. [导入]ASP常用函数:doAlert()
  7. JavaScript 设计模式核⼼原理与应⽤实践 之 开篇:前端工程师的成长论
  8. Serverless 实战 —— Serverless 架构揭秘与静态网站部署实战
  9. Java数组在内存中的分配
  10. html段落前的空格,HTML空格:空格前后