【问题标题】:Bind GridView on Button Click Event with Pagination使用分页在按钮单击事件上绑定 GridView
【发布时间】:2014-04-14 03:10:28
【问题描述】:

我是 asp.net 的新手,需要一些帮助。我有一个每页每20条记录分页的gridview,我在gridview之外有一个搜索按钮。我需要做的是当我单击搜索按钮时,结果必须绑定到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();
}

【问题讨论】:

    标签: c# asp.net gridview binding event-handling


    【解决方案1】:

    首先你应该有以下分页事件处理程序

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

    然后,将搜索按钮中的搜索/过滤逻辑移动到私有方法(例如“bindGridWithFilter”)

    提示:尝试将 BindData 和 bindGridWithFilter 结合起来,以便在没有过滤器时显示所有记录


    更新

    这里有一些重构的代码让你明白我上面的意思。

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

    这应该可行。

    【讨论】:

    • 感谢您的回答,我已经有了 pageindex 更改事件的代码。你能给我看一些你上面提到的例子吗?抱歉,我真的是asp.net的新手。非常感谢您的帮助
    • 嗨,Sam,再次感谢您耐心地回答我的询问。代码有点不像预期的那样工作。始终满足显示所有记录的条件,并且不会进入 else 语句(对于过滤的记录)
    • 这只是一个例子。您必须找到一种方法,而不是执行“if (gvwAssociation.DataSource == null)”。也许做这样的事情 if(uploadFlag.Trim() == string.Empty && fileName.Trim() == string.Empty && uploadDt.Trim() == string.Empty && status.Trim() == string.Empty )
    • 如果这有帮助,请接受答案
    • 您好 Sam 非常感谢您的解决方案,它现在可以工作了。我太棒了再次感谢。 :)
    猜你喜欢
    • 1970-01-01
    • 2015-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-26
    • 2015-09-28
    相关资源
    最近更新 更多