2011-09-07 67 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。选择任一。 –