簡體   English   中英

使用Linqdatasource在Gridview中不顯示Linq搜索查詢結果

[英]Linq Search Query Results are not Displayed in Gridview using Linqdatasource

我正在為使用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>

您是否將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.Select設置為查詢的文本版本,然后可能再次調用DataBind()。

感謝您的幫助! 我能夠通過添加onselecting屬性並創建一個為選擇目的而執行的新函數來解決這個問題。

引導我得出最終結論的網站是: Linqdatasource選擇了嘖嘖

當我將查詢從T-SQL移植到Linq時,我也犯了一個非常愚蠢的錯誤,我忘記了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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM