2014-04-14 70 views
0

我是新来的asp.net,需要一些帮助。我有一个GridView,每页有20条记录,我在GridView外面有一个搜索按钮。我需要做的是,当我单击搜索按钮时,结果必须绑定到gridview(现在正在发生),但是当记录超过pagesize并且我需要转到网格的下一页时,绑定会丢失,并且绑定的记录是加载事件中形成页面的记录。下面是我的代码示例。在按钮上绑定GridView单击分页事件

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     BindData(); 
    } 
} 

public void BindData() 
{ 

    { 
     List<EventFile> eventFile = new List<EventFile>(); 
     eventFile = CoMailAssociationDAL.GetUploadFileUnAssigned(0, "", "", "U"); 
     if (gvwAssociation.DataSource == null) 
     { 
      gvwAssociation.DataSource = eventFile; 
      gvwAssociation.DataBind(); 
     } 
    } 
} 
protected void btnSearch_Click(object sender, EventArgs e) 
{ 
    int uFlag = 0; 
    string uploadFlag = this.ddlUploadDate.SelectedValue; 
    string fileName = this.txtSearchText.Text; 
    string uploadDt = this.txtDate.Text; 
    string status = this.ddlStatus.SelectedValue.ToString(); 
    bt = true; 


    if (status == "Un-Assigned") 
    { 
     status = "U"; 
    } 
    else if (status == "Assigned") 
    { 
     status = "A"; 
    } 
    else 
    { 
     status = "B"; 
    } 


    if ((uploadFlag == "On") && (uploadDt == "")) 
    { 
     uFlag = 0; 
    } 
    else if (uploadFlag == "On") 
    { 
     uFlag = 1; 
    } 
    else if (uploadFlag == "OnorBefore") 
    { 
     uFlag = 2; 
    } 
    else 
    { 
     uFlag = 3; 
    } 


    fileSearch = CoMailAssociationDAL.SearchFile(uFlag, fileName, uploadDt, status); 

    gvwAssociation.DataSource = fileSearch; 
    gvwAssociation.DataBind(); 
} 

protected void gvwAssociation_PageIndexChanging(object sender, GridViewPageEventArgs e) 
{ 
    //SaveSelectedValues(); 
    gvwAssociation.PageIndex = e.NewPageIndex; 
    //BindData(); 
    //PopulateSelectedValues(); 
} 

回答

2

首先,你应该有寻呼下面的事件处理

protected void gvwAssociation_PageIndexChanging(object sender, GridViewPageEventArgs e) 
{ 
    gvwAssociation.PageIndex = e.NewPageIndex; 
    bindGridWithFilter(); 
} 

然后,搜索按钮内移动搜索/过滤器逻辑的私有方法(说“bindGridWithFilter”)

提示:尝试都BindData和bindGridWithFilter结合起来,所以当没有过滤器,你显示所有记录


UPDATE

这里有一些重构的代码让你知道我的意思。

protected void Page_Load(object sender, EventArgs e) 
     { 
      if (!IsPostBack) 
      { 
       bindGridWithFilter(); 
      } 
     } 

     protected void gvwAssociation_PageIndexChanging(object sender, GridViewPageEventArgs e) 
     { 
      gvwAssociation.PageIndex = e.NewPageIndex; 
      bindGridWithFilter(); 
     } 

     protected void btnSearch_Click(object sender, EventArgs e) 
     { 
      bindGridWithFilter(); 

     } 

     private void bindGridWithFilter() 
     { 
      List<EventFile> eventFile = new List<EventFile>(); 
      eventFile = CoMailAssociationDAL.GetUploadFileUnAssigned(0, "", "", "U"); 
      if (gvwAssociation.DataSource == null) 
      { 
       // If you don't have a filter you show all records 
       gvwAssociation.DataSource = eventFile; 
       gvwAssociation.DataBind(); 
      } 
      else 
      { 
       // This is same as the logic in your search button 
       // display only the filtered records 
       int uFlag = 0; 
       string uploadFlag = this.ddlUploadDate.SelectedValue; 
       string fileName = this.txtSearchText.Text; 
       string uploadDt = this.txtDate.Text; 
       string status = this.ddlStatus.SelectedValue.ToString(); 
       bt = true; 


       if (status == "Un-Assigned") 
       { 
        status = "U"; 
       } 
       else if (status == "Assigned") 
       { 
        status = "A"; 
       } 
       else 
       { 
        status = "B"; 
       } 


       if ((uploadFlag == "On") && (uploadDt == "")) 
       { 
        uFlag = 0; 
       } 
       else if (uploadFlag == "On") 
       { 
        uFlag = 1; 
       } 
       else if (uploadFlag == "OnorBefore") 
       { 
        uFlag = 2; 
       } 
       else 
       { 
        uFlag = 3; 
       } 


       List<EventFile> fileSearch = CoMailAssociationDAL.SearchFile(uFlag, fileName, uploadDt, status); 

       gvwAssociation.DataSource = fileSearch; 
       gvwAssociation.DataBind(); 
      } 
     } 

这应该起作用。

+0

感谢您的回答,我已经有了pageindex更改事件的代码。你能向我展示一些你上面提到的东西的例子吗?道歉,我真的是asp.net的新手。非常感谢帮助 – Moccassin

+0

我刚更新了我的答案。看一看 – Sam

+0

嗨,山姆,再次感谢您耐心回答我的问题。代码有点不像预期的那样工作。显示所有记录的条件始终满足,并且不会进入else语句(用于筛选记录) – Moccassin