sqldatasource.select没有在显式选择调用中考虑FilterExpression?

时间:2009-04-23 15:49:39

标签: c# asp.net sql-server

咩!无法理解这里发生了什么。

在SqlDataSource1上使用时,正确应用了过滤器,以正确填充相应的gridview。

话虽这么说,过滤不适用于我用于获取DataView的手动选择,用于数据库插入部分。

我做错了什么?是否有一些我不知道的事情?

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 个答案:

答案 0 :(得分:1)

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

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

)){

数据源的Select方法不使用DS'FilterExpression属性中的过滤器。它得到了整个事情。另一方面,DataView.Table.Select(String FilterExpression)返回其所有行的数组,已过滤。这有多酷,我解决了自己的问题。