Moccassin
Moccassin

Reputation: 169

Bind GridView on Button Click Event with Pagination

I'm new to asp.net and needs some help. I have a gridview with paging for every 20 records per page, I have a search button outside the gridview. What I need to do is when I click the search button, the results must be bind to gridview(which is happening now), however when the records are more than the pagesize and I need to go to the next page of the grid, the binding is lost and the binded records are the ones form the page on load event. below is my code sample.

  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();
}

Upvotes: 0

Views: 3890

Answers (1)

Sam
Sam

Reputation: 2917

First of all you should have the following event handler for paging

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

Then, move your search/ filter logic within the search button to a private method (say "bindGridWithFilter")

TIP: Try to combine both BindData and bindGridWithFilter so when there's no filter you display all records


UPDATE

Here's some refactored code for you to get an idea what I meant above.

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();
            }
        }

This should work.

Upvotes: 3

Related Questions