ASP.NET GridView - 具有会话变量条件的SelectCommand

时间:2012-11-08 01:02:30

标签: asp.net gridview ado.net

我是ASP.NET新手

我正在尝试将查询与会话变量中的条件结合起来。

基本上,我捕获某些输入并在下面构建一个Session会话。我知道它的工作原理是Response.Write。

Session("QueryCondition") = " AND Name like '%Test%' AND CompLeteFlag = 1"

我的GridView1中有一个SelectCommand

SelectCommand="SELECT top 100 * FROM [EnhanceTracking] WHERE 1 = 1 order by ID DESC"

我想做的是上面的查询结合Session(“QueryCondition”)来过滤记录。如果是经典的ASP,那么就可以这样做

SelectCommand="SELECT top 100 * FROM [EnhanceTracking] WHERE 1 = 1 " & Session("QueryCondition") & " order by ID DESC"

但是,我不知道如何在ASP.NET中执行此操作,因为它不允许将变量与SelectCommand组合。

请告知该怎么做。 谢谢你。

1 个答案:

答案 0 :(得分:0)

我做了类似的Web应用程序。您可以利用asp:SqlDatasource的OnSelecting事件(我建议使用它而不是在代码隐藏中动态构建select命令)来动态调整select命令的参数。

我不确定这是否是最佳方式,但它有效。

我的标记看起来像这样(GridView标签简化):

<asp:SqlDataSource ID="SelectItemsDataSource" runat="server" 
    ConnectionString="<%$ ConnectionStrings:hubConnectionString %>" 
    ProviderName="<%$ ConnectionStrings:hubConnectionString.ProviderName %>" 

        SelectCommand="SELECT itemEntity.id, itemEntity.name, itemEntity.filename, itemEntity.type, itemEntity.added, userEntity.name FROM item AS itemEntity 
                        LEFT OUTER JOIN USER AS userEntity ON itemEntity.uploader = userEntity.id WHERE itemEntity.type like @type ORDER BY itemEntity.added DESC" 
        OnSelecting="onItemSelecting"> 
        <SelectParameters>
           <asp:Parameter Name="@type" Type="String" />
        </SelectParameters>       
</asp:SqlDataSource>

<asp:GridView ID="ItemGrid" runat="server" DataSourceID="SelectItemsDataSource"/> // Simplified

注意OnSelecting属性。

然后在代码隐藏中,您可以简单地处理OnSelecting事件:

protected void onItemSelecting(object sender, SqlDataSourceSelectingEventArgs e)
{
    // Type value NOT given and parameter exists - Set wildcard
    if (Request.QueryString["type"] == null && e.Command.Parameters.Contains("@type"))
    {
        e.Command.Parameters["@type"].Value = "%";
        return;
    }
    if (Request.QueryString["type"] != null && e.Command.Parameters.Contains("@type"))
            e.Command.Parameters["@type"].Value = Request.QueryString["type"];   
    }

我相信Command.Parameters方法是sql注入安全的。如果没有,请有人纠正我。