asp.net学习之再论sqlDataSource 2

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这样的形式我试验过,好像行不通,不知道为什么。有待解释。
   
以下是MSDNFilterExpression的解释:

用于 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” />

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值