使用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>
您是否将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;