使用Linqdatasource在Gridview中不显示Linq搜索查询结果

本文关键字:Linq 搜索 查询 结果 显示 Linqdatasource Gridview 使用 | 更新日期: 2023-09-27 18:07:50

我正在为使用GridView显示的人员表实现搜索功能。Linq查询工作,但GridView不更新它的显示。数据源是一个linqdatasource。这个查询是在一个叫做Search_Submit的方法中实现的。

var personnel = from i in context.Personnel
                where SqlMethods.Like(i.PersonnelName, query)
                where SqlMethods.Like(i.PersonnelOffice, query)
                where SqlMethods.Like(i.Username, query)
                where SqlMethods.Like(i.Department, query)
                select new
                {
                    PersonnelName = i.PersonnelName,
                    PersonnelOffice = i.PersonnelOffice,
                    Username = i.Username,
                    Department = i.Department
                };

这是调用方法的按钮。

<asp:Button ID="PersonnelSearchButton" runat="server" Text="Search" OnClick="Search_Submit" />

下面是linqdatasource的代码。

<asp:LinqDataSource ID="LinqDataSource1" runat="server" ContextTypeName="PersonnelDataContext" TableName="Personnel">
</asp:LinqDataSource>

使用Linqdatasource在Gridview中不显示Linq搜索查询结果

您是否将Submit_Search中的LINQ查询结果绑定到GridView?展示更多的代码(如完整的Serach_Submit)可能会有所帮助。

。,我希望是这样的:

protected void Search_Submit(object sender, EventArgs e)
{
    var personnel = (from i in context.Personnel
                     where SqlMethods.Like(i.PersonnelName, query)
                     where SqlMethods.Like(i.PersonnelOffice, query)
                     where SqlMethods.Like(i.Username, query)
                     where SqlMethods.Like(i.Department, query)
                     select new
                         {
                             PersonnelName = i.PersonnelName,
                             PersonnelOffice = i.PersonnelOffice,
                             Username = i.Username,
                             Department = i.Department
                          }).ToList();
    GridView1.DataSource = personnel;
    GridView1.DataBind();
}

您是否使用linqdatasource?还是在按钮中执行查询?这是两码事。

您必须将查询分配给linqdatasource,然后刷新它。我想不起来了,但我认为你设置了linqdatasource。选择查询的文本版本,然后可能再次调用DataBind()。

感谢您的帮助!我可以通过添加onselection属性并创建一个用于选择目的的新函数来解决这个问题。

引导我得出最后结论的网站是:选择tut

我还犯了一个非常愚蠢的错误,当我将查询从T-SQL移植到Linq时,我忘记了where语句后面的OR '||'。

这是代码的最终输出。

按钮
<asp:Button ID="PersonnelSearchButton" runat="server" Text="Search" />

显示数据表格

<asp:GridView ID="GridView1" runat="server" AllowPaging="True" 
    AutoGenerateColumns="False" BorderColor="Black" BorderStyle="Solid" 
    BorderWidth="1px" CellPadding="3" DataKeyNames="ID"
    DataSourceID="LinqDataSource1" onrowupdating="GridView1_RowUpdating" 
    ShowFooter="True" EnableModelValidation="True" 
    onrowcommand="GridView1_RowCommand">

Linqdatasource

<asp:LinqDataSource ID="LinqDataSource1" runat="server" ContextTypeName="PersonnelDataContext" TableName="Personnel" OnSelecting="LinqDataSource1_Selecting">
</asp:LinqDataSource>
c#

protected void LinqDataSource1_Selecting(object sender, LinqDataSourceSelectEventArgs e)
{
    String query = "%%";
    if (PersonnelSearchTextBox.Text != String.Empty)
    {
        query = "%" + PersonnelSearchTextBox.Text + "%";
    }
    var personnel = (from i in context.Personnel
                         where SqlMethods.Like(i.PersonnelName, query) ||
                                 SqlMethods.Like(i.PersonnelOffice, query) ||
                                 SqlMethods.Like(i.Username, query) ||
                                 SqlMethods.Like(i.Department, query)
                         select new
                         {
                             ID = i.ID,
                             PersonnelName = i.PersonnelName,
                             PersonnelOffice = i.PersonnelOffice,
                             Department = i.Department,
                             Username = i.Username
                         });

    e.Result = personnel;
}

我希望这在将来对别人有帮助。

快速编辑:这行代码应该在你的Page_Load方法中。

GridView1.DataSourceID = LinqDataSource1.ID;