代码之家  ›  专栏  ›  技术社区  ›  Olivier Tremblay

sqldatasource.select不考虑显式select调用上的filterexpression?

  •  1
  • Olivier Tremblay  · 技术社区  · 16 年前

    无聊的!不明白这里发生了什么。

    在sqldatasource1上使用时,正确应用了筛选器,以正确填充相应的GridView。

    也就是说,过滤并没有应用于我用于获取数据库插入部分的数据视图的手动选择。

    我做错什么了?有什么事我不知道吗?

    SqlDataSource1.FilterExpression = (string)ViewState["filtre"];
    
        cmdApply.Text = (string)ViewState["filtre"];
    
        DataView thingie =     (DataView)SqlDataSource1.Select(DataSourceSelectArguments.Empty);
    
        thingie.RowFilter = (string)ViewState["filtre"];
    
        DataView verifdv =     (DataView)SqlDataSource2.Select(DataSourceSelectArguments.Empty);
    
        verifdv.Sort = "filterClient";
    
        SqlConnection dbconn = new SqlConnection(SqlDataSource1.ConnectionString);        
    
        foreach ( DataRow dr in thingie.Table.Rows ) {
    
            if ( verifdv.Find(dr["orgID"]) == -1 ) {
    
            SqlCommand addFilter = new SqlCommand("INSERT INTO dbo.usermetafilter     (filterUser, filterClient) VALUES (@user, @client)", dbconn);
    
                    addFilter.Parameters.Add("@user", SqlDbType.NVarChar).Value = "dummyvalue";
    
                    addFilter.Parameters.Add("@client", SqlDbType.Int).Value = dr["orgID"];
    
                    addFilter.Connection.Open();
    
                    addFilter.ExecuteNonQuery();
    
                    addFilter.Connection.Close();
    
                }
    
            }
    
    1 回复  |  直到 16 年前
        1
  •  1
  •   Olivier Tremblay    16 年前

    没有关系。正确的代码应该是:

    foreach ( DataRow dr in thingie.Table.Select((string)ViewState["filtre"];
    

    ){

    数据源的Select方法未使用DS的FilterExpression属性中的筛选器。它得到了全部。另一方面,dataview.table.select(string filterexpression)返回其所有行的已筛选数组。太酷了,我自己解决了问题。