2011-09-07 80 views
0

我正在爲使用GridView顯示的人員表執行搜索功能。 Linq查詢有效,但GridView不更新它的顯示。數據源是一個linqdatasource。 這是在名爲Search_Submit的方法中實現的查詢。使用Linqdatasource不在Gridview中顯示Linq搜索查詢結果

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> 

回答

0

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

,導致我到我最後的結論網站是: Linqdatasource onselecting tut

我也做了一個非常愚蠢的錯誤,當我從移植的T-SQL查詢到LINQ,我忘了OR「||」在我的發言之後。

這裏是代碼的最終輸出。

按鈕

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

的GridView

<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; 
1

你在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(); 
} 
+0

綁定並沒有幫助任何方式打開或關閉,如果我將gridview的數據源設置爲我的變量,那麼它將與linqdatasource衝突。 –

1

您是否使用了的LinqDataSource?或者你是否在按鈕中執行查詢?他們是兩個不同的東西。

您必須將您的查詢分配給linqdatasource,然後刷新它。我不記得手,但我認爲你設置了linqdatasource.Select到你的查詢的文本版本,然後再次調用DataBind()。

+0

我有一個文本框和一個調用Search_Submit()的提交按鈕。我不知道如何設置linqdatasource。選擇任一。 –