繁体   English   中英

总行数SqlDataSource GridView

[英]Total Row Count SqlDataSource GridView

因此,我将GridView设置为SqlDataSource。 分页已启用,我有一个下拉菜单,用于更改每页显示的行数。 我可以在一个页面中显示总行数,但是我也想显示总行数。 (例如:“显示315中的1-25”)。

因此,我的问题是:

1)如何获取整个数据源的总行数? (不仅仅是GridView)我拥有的代码OnSelectedData方法不起作用,并返回零。

2)如何获取每页显示的数字不同? 例如,在第二页上,它需要说“显示315的26-50”

这是我的代码(C#):

public partial class UserControls_BloombergAllUsersControl : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{       
}
int gridViewTotalRowCount;
protected void onSelectedData(object sender, SqlDataSourceStatusEventArgs e)
{
    gridViewTotalRowCount = e.AffectedRows;
}
protected void GridView1_DataBound(object sender, EventArgs e)
{
    int pageRowsCount = GridView1.Rows.Count;

    Total1.Text = "Showing 1 - " + pageRowsCount.ToString() + " of " + gridViewTotalRowCount.ToString();
}
private void BindGridView1()
{
    try
    {
        this.GridView1.DataBind();

        if (Convert.ToInt32(DropDownList1.SelectedValue) != null)
            GridView1.PageSize = Convert.ToInt32(DropDownList1.SelectedValue);
    }
    catch (Exception ex)
    { throw ex; }
}
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
    GridView1.PageIndex = e.NewPageIndex;
    BindGridView1();
}
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
    BindGridView1();
}

}

如果有人可以帮助,那就太好了。 谢谢!

您可以在onSelectedData处理程序中将分页信息设置为Total1文本,如下所示

protected void onSelectedData(object sender, SqlDataSourceStatusEventArgs e)
{
    int startRowOnPage = (GridView1.PageIndex * GridView1.PageSize) + 1;
    int lastRowOnPage = startRowOnPage + GridView1.Rows.Count - 1;
    int totalRows = e.AffectedRows;

    Total1.Text = "Showing " + startRowOnPage.ToString() +
                  " - " + lastRowOnPage + " of " + totalRows;
}

因此,您的SQLDataSource应该类似于以下示例:

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
     OnSelected="onSelectedData"
     ... >
</asp:SqlDataSource>

而且您无需为GridView1_DataBound分页信息做任何事情。

我的意思是您可以从GridView声明中删除OnDataBound="GridView1_DataBound"

EDITED

要设置PageSize ,您应该为其设置默认值,例如以下示例:

protected void Page_Load(object sender, EventArgs e)
{    
    if (!IsPostBack)
    {  
        if (Convert.ToInt32(DropDownList1.SelectedValue) != null)
            GridView1.PageSize = Convert.ToInt32(DropDownList1.SelectedValue);
    }
}

由于您正在使用SqlDataSource,请尝试以下代码:

Protected Sub SqlDataSource1_Selected(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.SqlDataSourceStatusEvent Args) Handles
SqlDataSource1.Selected

  Dim cnt As Integer = e.AffectedRows

End Sub

暂无
暂无

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

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