简体   繁体   English

通过分页筛选LINQ结果在ASP.NET Web窗体中

[英]Filtering LINQ results in ASP.NET Web Forms with pagination

I'm trying to filter the contents of a GridView, however I'm getting some off behaviour in the process: 我正在尝试过滤GridView的内容,但是在此过程中出现了一些问题:

The contents of the asp page look like this: ASP页面的内容如下所示:

<form id="form1" runat="server">

<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Button ID="button1" runat="server" onclick="button1_Click" Text="Submit" />
<asp:GridView ID="GridView1" AllowPaging="true" PageSize="8"
AutoGenerateColumns="false" runat="server"
OnPageIndexChanging="GridView1_PageIndexChanging">

<Columns>
  <asp:BoundField HeaderText="ID" DataField="ID" />
  <asp:BoundField HeaderText="Client Name" DataField="Client_Name" />
  <asp:BoundField HeaderText="Project" DataField="Project_Name" />
  <asp:BoundField HeaderText="Uploaded By" DataField="Uploaded_By" />
</Columns>

</asp:GridView>
</form>

And the code behind file: 以及文件后面的代码:

public partial class Sample1 : System.Web.UI.Page
{
  protected void Page_Load(object sender, EventArgs e)
  {
    if (!this.Page.IsPostBack)
    {
        SourceDataContext db = new SourceDataContext();

        GridView1.DataSource = from q in db.Cust
                               orderby q.ID
                               select q;
        GridView1.DataBind();
    }
}

protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
    GridView1.PageIndex = e.NewPageIndex;
}

protected void button1_Click(object sender, EventArgs e)
{
    string client = TextBox1.Text;

    SourceDataContext db = new SourceDataContext();

    GridView1.DataSource = from q in db.Cust
                           where q.Client_Name == client
                           orderby q.ID
                           select q;
    GridView1.DataBind();

    //reset page index to 0
    GridView1.PageIndex = 0;
}
}

Filtering partially works, however the paging does not. 过滤部分起作用,但是分页不起作用。 Further, the paging requires the page to be clicked twice for it to be selected. 此外,该分页要求页面被单击两次才能被选中。

Thanks. 谢谢。

Try it. 试试吧。 Save this code in a function let name it BindGrid 将此代码保存在一个函数中,使其命名为BindGrid

private void BindGrid()
{
 SourceDataContext db = new SourceDataContext();

    GridView1.DataSource = from q in db.Cust
                           orderby q.ID
                           select q;
    GridView1.DataBind();
}
// Create this method in your code behind

and call it in the GridView1_PageIndexChanging after assinging new index 并在分配新索引后在GridView1_PageIndexChanging中调用它

protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
    GridView1.PageIndex = e.NewPageIndex;
    BindGrid();
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM