【问题标题】:Filter Gridview results using Linq to Sql Object datasource with a LIKE operator使用带有 LIKE 运算符的 Linq to Sql 对象数据源过滤 Gridview 结果
【发布时间】:2010-10-22 00:35:13
【问题描述】:

我有一个绑定到 LINQ to Sql 数据源的 gridview。我想使用 LIKE 运算符过滤网格视图中的结果。即我有一个用于搜索用户名的文本框,我想选择所有用户名,如 [文本框值]。

下面是我的代码:

<h1>Manage Users</h1>
搜索用户 用户名:
<asp:GridView ID="GridView2" runat="server" AllowPaging="True" 
    AllowSorting="True" AutoGenerateColumns="False" DataSourceID="LinqDataSource1">
    <Columns>
        <asp:BoundField DataField="UserName" HeaderText="User Name" ReadOnly="True" 
            SortExpression="UserName" />
        <asp:BoundField DataField="FullName" HeaderText="Full Name" ReadOnly="True" 
            SortExpression="FullName" />
        <asp:BoundField DataField="Email" HeaderText="Email" ReadOnly="True" 
            SortExpression="Email" />
       <asp:BoundField DataField="LastLoginDate" HeaderText="Last Login" ReadOnly="True" 
            SortExpression="LastLoginDate" DataFormatString="{0:dd MMMM yyyy}"/>
       <asp:HyperLinkField Text="Edit" DataNavigateUrlFields="UserId" DataNavigateUrlFormatString="~/Pages/UsersMaintenance/CreateEditUser.aspx?UserId={0}" />
    </Columns>
</asp:GridView>
<asp:LinqDataSource ID="LinqDataSource1" runat="server" 
    ContextTypeName="AirProducts.BusinessLogic.AirProductsDataContext" 

    Select="new (UserId,UserName, Details.FullName,Membership.Email,Membership.LastLoginDate)" 
    TableName="Users" Where="UserName == @UserName" >
    <WhereParameters>
        <asp:ControlParameter ControlID="txtUsername" Name="UserName" 
            PropertyName="Text" Type="String" />
    </WhereParameters>
</asp:LinqDataSource>

【问题讨论】:

    标签: asp.net linq-to-sql .net-3.5 gridview


    【解决方案1】:

    在 LINQ 表达式的 Where 子句中调用 String.Contains 方法替换等号运算符:

    <asp:LinqDataSource ID="LinqDataSource1" runat="server" 
        ContextTypeName="AirProducts.BusinessLogic.AirProductsDataContext" 
    
            Select="new (UserId,UserName, Details.FullName,Membership.Email,Membership.LastLoginDate)" 
            TableName="Users" Where="UserName.Contains(@UserName)" >
            <WhereParameters>
                    <asp:ControlParameter ControlID="txtUsername" Name="UserName" 
                            PropertyName="Text" Type="String" />
            </WhereParameters>
    </asp:LinqDataSource>
    

    【讨论】:

    【解决方案2】:

    您可以获取您的需求信息,请参考此链接 www.delicious.com/sridharnetha

    protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
     {
      if (e.CommandName.Equals("AddNew"))
      {
       TextBox txtNewName=(TextBox)GridView1.FooterRow.FindControl("txtNewName"); 
       DropDownList cmbNewGender = (DropDownList)GridView1.FooterRow.FindControl("cmbNewGender"); 
       TextBox txtNewCity = (TextBox)GridView1.FooterRow.FindControl("txtNewCity"); 
       TextBox txtNewState = (TextBox)GridView1.FooterRow.FindControl("txtNewState"); 
       DropDownList cmbNewType = (DropDownList)GridView1.FooterRow.FindControl("cmbNewType");
    
       customer.Insert(txtNewName.Text, cmbNewGender.SelectedValue, txtNewCity.Text, txtNewState.Text, cmbNewType.SelectedValue) ; 
       FillCustomerInGrid();
      }
    } 
    

    【讨论】:

      【解决方案3】:

      我无法让它在 LinqDataSource 的标记中工作,但能够在此处捕获它,另外我还获得了智能感知支持。

      protected void LinqDataSource1_Selecting(object sender, LinqDataSourceSelectEventArgs e)
      {
          AirProductsDataContext db = new AirProductsDataContext();
          e.Result = from v in db.Users orderby v.UserName ascending
                     where v.UserName.Contains(txtUsername.Text)
                     select new {v.UserId,v.UserName, v.UserDetail.FullName,v.Membership.Email,v.Membership.LastLoginDate};
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-08-08
        • 1970-01-01
        • 2011-08-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多