Count total rows of gridview with pagination

不羁的心 提交于 2019-12-17 11:45:10

问题


I have a GridView with paging. When I try to count gridview row with gridview.rows.count, It gives me row count for current page only.

How can I get total rows of GridView irrespective of page index?

// Here is the code of .aspx page

<%@ Page Title="Search candidates based on vacancy" Language="C#" MasterPageFile="~/HR     Department/hrmasterpage.master"
   AutoEventWireup="true" CodeFile="searcAppForVac.aspx.cs"     Inherits="HR_Department_searcAppForVac" %>

<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="Server"></asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1"       runat="Server">    <table width="100%">
    <tr>
        <td>
            &nbsp;
        </td>
    </tr>
    <tr>
        <td align="center" class="tdtitle">
            Search Candidates
        </td>
    </tr>
    <tr>
        <td>
            <asp:ScriptManager ID="ScriptManager1" runat="server">
            </asp:ScriptManager>
            <asp:UpdatePanel ID="UpdatePanel1" runat="server">
                <ContentTemplate>
                    <table width="100%">
                        <tr>
                            <td class="RowHeight" width="20%">
                                Select Company
                            </td>
                            <td width="30%">
                                <asp:DropDownList ID="companyList" runat="server" AppendDataBoundItems="true" AutoPostBack="True"
                                    OnSelectedIndexChanged="companyList_SelectedIndexChanged" Width="150px">
                                    <asp:ListItem Text="-Select Company-" Value="-1"></asp:ListItem>
                                </asp:DropDownList>
                            </td>
                            <td width="20%">
                                Select Department
                            </td>
                            <td width="30%">
                                <asp:DropDownList ID="deptList" runat="server" AppendDataBoundItems="true" AutoPostBack="True"
                                    onclick="Validate();" OnSelectedIndexChanged="deptList_SelectedIndexChanged"
                                    Width="150px">
                                    <asp:ListItem Value="-1">-Select Department-</asp:ListItem>
                                </asp:DropDownList>
                            </td>
                        </tr>
                        <tr>
                            <td class="RowHeight" width="20%">
                                Select Vacancy
                            </td>
                            <td colspan="3" width="*">
                                <asp:DropDownList ID="vacanyList" runat="server" AppendDataBoundItems="true" 
                                    Width="200px" AutoPostBack="True" 
                                    onselectedindexchanged="vacanyList_SelectedIndexChanged">
                                    <asp:ListItem Value="-1">-Select Vacancy-</asp:ListItem>
                                </asp:DropDownList>
                            </td>
                        </tr>
                        <tr>
                            <td colspan="4" align="center">
                                &nbsp;
                                <asp:Label ID="notifyLbl" runat="server" Font-Size="Large" ForeColor="Red" 
                                    Text="Label"></asp:Label>
                            </td>
                        </tr>
                        <tr>
                            <td colspan="4">
                                <asp:Label ID="titleLbl" runat="server" Font-Size="Large" ForeColor="Red" 
                                    Text="Label"></asp:Label>
                            </td>
                        </tr>
                        <tr>
                            <td colspan="4">
                                <asp:GridView ID="appForVacGrid" runat="server" AutoGenerateColumns="False" 
                                CellPadding="4" ForeColor="#333333" AllowPaging="True" 
                                    onpageindexchanging="appForVacGrid_PageIndexChanging" GridLines="None" 
                                    PageSize="3">
                                    <RowStyle BackColor="#EFF3FB" />
                                    <Columns>
                                        <asp:TemplateField>
                                            <HeaderTemplate>
                                                App.ID
                                            </HeaderTemplate>
                                            <ItemTemplate>
                                                <asp:Label ID="appIdLbl" runat="server" Text='<%# Eval("AppId") %>'></asp:Label>
                                            </ItemTemplate>
                                        </asp:TemplateField>
                                        <asp:TemplateField>
                                            <HeaderTemplate>
                                                First Name
                                            </HeaderTemplate>
                                            <ItemTemplate>
                                                <asp:Label ID="firstNameLbl" runat="server" Text='<%# Eval("AppFirstName") %>'></asp:Label>
                                            </ItemTemplate>
                                        </asp:TemplateField>
                                        <asp:TemplateField>
                                            <HeaderTemplate>
                                                Last Name
                                            </HeaderTemplate>
                                            <ItemTemplate>
                                                <asp:Label ID="lastNameLbl" runat="server" Text='<%# Eval("AppLastName") %>'></asp:Label>
                                            </ItemTemplate>
                                        </asp:TemplateField>
                                        <asp:TemplateField>
                                            <HeaderTemplate>
                                                Qualification
                                            </HeaderTemplate>
                                            <ItemTemplate>
                                                <asp:Label ID="qualiNameLbl" runat="server" Text='<%# Eval("QualiName") %>'></asp:Label>
                                            </ItemTemplate>
                                        </asp:TemplateField>
                                        <asp:TemplateField>
                                            <HeaderTemplate>
                                                &nbsp;Experience
                                            </HeaderTemplate>
                                            <ItemTemplate>
                                                <asp:Label ID="Label1" runat="server" Text='<%# Eval("TotalExpYear") %>'></asp:Label>
                                            </ItemTemplate>
                                        </asp:TemplateField>
                                        <asp:TemplateField>
                                            <HeaderTemplate>
                                                EmailId
                                            </HeaderTemplate>
                                            <ItemTemplate>
                                                <asp:Label ID="emailLbl" runat="server" Text='<%# Eval("AppEmailId1") %>'></asp:Label>
                                            </ItemTemplate>
                                        </asp:TemplateField>
                                        <asp:TemplateField>
                                            <HeaderTemplate>
                                                Send Mail
                                            </HeaderTemplate>
                                            <ItemTemplate>
                                                <asp:CheckBox ID="sendMailBox" runat="server" />
                                            </ItemTemplate>
                                        </asp:TemplateField>
                                    </Columns>
                                    <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" 
                                        HorizontalAlign="Right" />
                                    <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" 
                                        VerticalAlign="Top" />
                                    <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
                                    <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" 
                                        Font-Size="Medium" HorizontalAlign="Left" />
                                    <EditRowStyle BackColor="#2461BF" />
                                    <AlternatingRowStyle BackColor="White" />
                                </asp:GridView>
                            </td>
                        </tr>
                        <tr>
                            <td colspan="4" align="center">
                                &nbsp;
                            </td>
                        </tr>
                        <tr>
                            <td align="center" colspan="4">
                                <asp:Button ID="sendMailBtn" runat="server" Height="40px" Text="SEND MAIL" 
                                    Width="100px" onclick="sendMailBtn_Click" />
                            </td>
                        </tr>
                        <tr>
                            <%--<td>
                                &nbsp;
                            </td>--%>
                        </tr>
                    </table>
                </ContentTemplate>
                <Triggers>
                <asp:AsyncPostBackTrigger ControlID="companyList" EventName="SelectedIndexChanged" />
                <asp:AsyncPostBackTrigger ControlID="deptList" EventName="SelectedIndexChanged" />
                <asp:AsyncPostBackTrigger ControlID="appForVacGrid" EventName="pageindexchanged" />
                </Triggers>
              </asp:UpdatePanel>

        </td>
    </tr>
    <tr>
        <td>
            &nbsp;
        </td>
    </tr>
    <tr>
        <td>
            &nbsp;
        </td>
    </tr>
</table>

<script type="text/javascript">
    function alertOnBadSelection() {
        var select = document.getElementById('companyList');
        if (select.options[select.selectedIndex].value == "-Select Company-") {
            alert('Please Select Company!');
            return false;
        }
    }    
</script>

// This is code of my aspx.cs page

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Collections;

public partial class HR_Department_searcAppForVac : System.Web.UI.Page
{
DataOperation oDo = new DataOperation();
AppVacancyDetailClass objAppVacDetail = new AppVacancyDetailClass();
protected void Page_Load(object sender, EventArgs e)
{
    notifyLbl.Visible = false;
    titleLbl.Visible = false;
    sendMailBtn.Visible = false;
    try
    {
        if (!IsPostBack)
        {
            // Disable department dropdown list and vacancy dropdown list till company is not selected.
            deptList.Enabled = false;
            vacanyList.Enabled = false;
            //Fill Company dropdown list.
            DataTable objCmpnyTable = oDo.DropDownList("select * from tblCompanyMaster");
            if (objCmpnyTable.Rows.Count > 0)
            {
                companyList.DataSource = objCmpnyTable;
                companyList.DataValueField = "CompId";
                companyList.DataTextField = "CompName";
                companyList.DataBind();
            }
            else
            {
                notifyLbl.Visible = true;
                notifyLbl.Text = "There is not any company in the list.";
            }
        }
        else
        {
            if (companyList.SelectedIndex <= 0)
            {
                //Disable department dropdown list and vacancy dropdown list till company is not selected.
                deptList.Enabled = false;
                vacanyList.Enabled = false;
            }
        }
     }
     catch (Exception)
     {
          throw;
     }
 }
protected void companyList_SelectedIndexChanged(object sender, EventArgs e)
{
    //Disable vacancy dropdown list till depratment list is not selected
    vacanyList.Enabled = false;
    appForVacGrid.DataSource = null;
    appForVacGrid.DataBind();
    try
    {
        if (companyList.SelectedIndex > 0)
        {
            deptList.Enabled = true;
            deptList.Items.Clear();
            string str = "select * from vwCompWiseList where CompId=" + companyList.SelectedValue;
            DataTable objDeptTable = oDo.DropDownList("select DeptId,DeptName from vwCompWiseDept where CompId= "+companyList.SelectedValue);
            if (objDeptTable.Rows.Count > 0)
            {
                deptList.DataSource = objDeptTable;
                deptList.DataTextField = "DeptName";
                deptList.DataValueField = "deptId";
                deptList.DataBind();
                deptList.Items.Insert(0, new ListItem("--Select Department--", "-1"));
            }
            else 
            {
                deptList.Items.Insert(0, new ListItem("--No Departments--", "-1"));
                notifyLbl.Visible = true;
                notifyLbl.Text = "No Departments Available in " + companyList.SelectedItem.Text;
            }
        }
        else
        {
            notifyLbl.Visible = true;
            notifyLbl.Text = "Select Company....";
            appForVacGrid.DataSource = null;
            appForVacGrid.DataBind();
        }
    }
    catch (Exception)
    {

        throw;
    }    
}
protected void deptList_SelectedIndexChanged(object sender, EventArgs e)
{
    try
    {
        if (deptList.SelectedIndex > 0)
        {
            vacanyList.Enabled = true;
            vacanyList.Items.Clear();
            DataTable objVacancytbl = oDo.DropDownList("select VacId,VacTitle from tblVacancyMaster where DeptId =" + deptList.SelectedValue + " and CompId=" + companyList.SelectedValue);
            if (objVacancytbl.Rows.Count > 0)
            {
                vacanyList.DataSource = objVacancytbl;
                vacanyList.DataValueField = "VacId";
                vacanyList.DataTextField = "VacTitle";
                vacanyList.DataBind();
                vacanyList.Items.Insert(0, new ListItem("--Select Vacancy--", "-1"));
                appForVacGrid.DataSource = null;
                appForVacGrid.DataBind();
            }
            else
            {
                notifyLbl.Visible = true;
                notifyLbl.Text = "ALL VACANCIES ARE CLOSED IN "+" "+deptList.SelectedItem.Text.ToUpper();
                vacanyList.Enabled = false;
                appForVacGrid.DataSource = null;
                appForVacGrid.DataBind();
            }
        }
        else
        {
            notifyLbl.Visible = true;
            notifyLbl.Text = "Select Department...";
            appForVacGrid.DataSource = null;
            appForVacGrid.DataBind();
            vacanyList.Enabled = false;
        }
    }
    catch (Exception)
    {            
        throw;
    }
}
protected void vacanyList_SelectedIndexChanged(object sender, EventArgs e)
{
    try
    {
        DataTable AppListTbl = objAppVacDetail.GetValue("CompId=" + companyList.SelectedValue + " and DeptId=" + deptList.SelectedValue + " and VacId=" + vacanyList.SelectedValue);
        if (AppListTbl.Rows.Count > 0)
        {
            appForVacGrid.DataSource = AppListTbl;
            appForVacGrid.DataBind();
            appForVacGrid.Columns[5].Visible = false;
            Session.Add("snAppListTbl", AppListTbl);
            titleLbl.Visible = true;
            titleLbl.Text = AppListTbl.Rows.Count.ToString() + " " + "CANDIDATE(S) ARE ELIGIBLE FOR THE POST OF" + " " + vacanyList.SelectedItem.Text.ToUpper() + ".";
            sendMailBtn.Visible = true;
        }
        else
        {
            notifyLbl.Visible = true;
            notifyLbl.Text = "ALL VACANCIES ARE CLOSED IN " + " " + deptList.SelectedItem.Text.ToUpper();
            appForVacGrid.DataSource = null;
            appForVacGrid.DataBind();
        }
    }
    catch (Exception)
    {

        throw;
    }
}
protected void appForVacGrid_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
    //DataTable AppListTbl = (DataTable)Session["snAppListTbl"];
    titleLbl.Visible = true;
    titleLbl.Text = ((DataTable)Session["snAppListTbl"]).Rows.Count.ToString() + " " + "CANDIDATE(S) ARE ELIGIBLE FOR THE POST OF" + " " + vacanyList.SelectedItem.Text.ToUpper() + ".";
    appForVacGrid.PageIndex = e.NewPageIndex;
    appForVacGrid.DataSource = (DataTable)Session["snAppListTbl"];
    appForVacGrid.DataBind();
    sendMailBtn.Visible = true;
}
protected void sendMailBtn_Click(object sender, EventArgs e)
{
    DataTable AppListTable = ((DataTable)Session["snAppListTbl"]);
    int intTotalRows = AppListTable.Rows.Count;
    string strFromId="",strToId="",strCcId="",strBccId="";
    string strVacTitle="",strCompName="",strMailBody="";
    string strSubject = "Rgarding Selection of Your Resume";
    Label EmailLbl;
    //for (int intRow = 0; intRow < intTotalRows; intRow++)
    foreach (GridViewRow Row in appForVacGrid.Rows)
    {
        CheckBox objSendMail = (CheckBox)Row.FindControl("sendMailBox");
        //CheckBox objSendMail = (CheckBox)appForVacGrid.Rows[Row].FindControl("sendMailBox");
        if (objSendMail.Checked)
        {
            if (strToId == "")
            {
                //strToId = AppListTable.Rows[Row]["AppEmailId1"].ToString();
                EmailLbl = (Label)Row.FindControl("emailLbl");
                strToId = EmailLbl.Text;
            }
            else
            {
                //strToId += "," + AppListTable.Rows[Row]["AppEmailId1"].ToString();
                EmailLbl = (Label)Row.FindControl("emailLbl");
                strToId +=","+ EmailLbl.Text;
            }
        }
    }
    strVacTitle = AppListTable.Rows[intTotalRows]["VacTitle"].ToString();
    strCompName = AppListTable.Rows[intTotalRows]["CompName"].ToString();
    strMailBody = CommonProcedures.GetMailBody(strVacTitle, strCompName);
    //CommonProcedures.SendMail(strFromId, strToId, strCcId, strBccId, strSubject, null, strMailBody, false);
}
}

Now I want to send mail to all those candidates whose checkbox is checked.. I trid so many things but didnt get any solution


回答1:


yes, that's true, it will only return the current page rows only. If you really want to get the total row count, you need to get from your datasource instead.

Like... if you have DataTable then it will be like...

DataTable.Rows.Count



回答2:


if you're using sqldatasource or objectdatasource You need to use the ReturnValue of the ObjectDataSourceStatusEventArgs or SqlDataSourceStatusEventArgs while handling the datasource's Selected event.

If you are using sqldatasource, you can count the total rows using the 'Selected' event which gets fired after the select operation has been completed.

protected void SqlDataSource1_Selected(object sender, SqlDataSourceStatusEventArgs e)
{
  int rowCount = e.AffectedRows;
}  

If you're using object data source, it's important to note that the Selected event on the ODS gets called twice, once returning the data set, and again to call the method you specified in the SelectCountMethod property. Simply test to see if the return is an Int32 in the event.

protected void ObjectDataSource1_Selected(object sender, ObjectDataSourceStatusEventArgs e)
{
    if (e.ReturnValue.GetType() == typeof(System.Int32))
        int rowCount = (Int32)e.ReturnValue;
}  

You can find a working example at: http://www.webswapp.com/codesamples/aspnet20/dropdownlist_gridview/default.aspx

if your GridView is being filled by a DataSet or DataTable:

int rowCount=((DataTable)Customer).Rows.Count;

If you are binding the list or array of objects then you can do the following:

int rowCount = ((Customer[])gv.DataSource).Count;



回答3:


Yes I think using PagedDataSource is a better option. I'm using it.

PagedDataSource pds = new PagedDataSource();
pds.DataSource = dt_main.DefaultView;
pds.AllowPaging = true;
pds.PageSize = 8;

int currentPage;

if (Request.QueryString["page"] != null)
{
    currentPage = Int32.Parse(Request.QueryString["page"]);
}
else
{
    currentPage = 1;
}

pds.CurrentPageIndex = currentPage - 1;
Label1.Text = "Page " + currentPage + " of " + pds.PageCount;

if (!pds.IsFirstPage)
{
    linkPrev.NavigateUrl = Request.CurrentExecutionFilePath + "?page=" + (currentPage - 1);
}

if (!pds.IsLastPage)
{
    linkNext.NavigateUrl = Request.CurrentExecutionFilePath + "?page=" + (currentPage + 1);
}
gridMain.DataSource = pds;
gridMain.DataBind();



回答4:


Try below code

int _TotalRecs = ((System.Data.DataView)GridView.DataSource).Count;
int _CurrentRecStart = GridView.PageIndex * GridView.PageSize + 1;
int _CurrentRecEnd = GridView.PageIndex * GridView.PageSize + GridView.Rows.Count;

lblTitle.Text = string.Format("Displaying {0} to {1} of {2} records found", _CurrentRecStart, _CurrentRecEnd, _TotalRecs);

For e.g. Output will be like below....

Displaying 1 to 15 of 67 records found.




回答5:


You can use a paged datasource to bind the gridview and it will be very easy for custom paging and get the page count.




回答6:


            if (Grid.DataSource == null)
                return 0;
            else if (Grid.DataSource.GetType() == typeof(DataTable))
                return (Grid.DataSource as DataTable).Rows.Count;
            else if (Grid.DataSource.GetType().IsGenericType)
                return (Grid.DataSource as IList).Count;



回答7:


try (gridView.DataSource as IEnumerable<object>).Count() for main collection




回答8:


Like this

(gridview1.DataSource as DataTable).Rows.Count();



回答9:


If you are binding using the datatable or other datasource you can show the total records from the datasource. For example

  if (dtLog != null && dtLog .Rows.Count >= 0)
            {
                lblTotal.Text = "Total " + Convert.ToString(dtLog .Rows.Count) + " records.";
            }



回答10:


<font-color='red'><b>dim dt as datatable<Br>
dt=gridview1.datasource<br>
msgbox (dt.rows.count)<b></font>



回答11:


If you have a gridview which will be filled using a datatable or dataset then count the datatable or dataset (ds.table(0).rows.count) For example

For cnt1 = 0 To Total_batchRecords - 1
   dgchgsdtl1.Rows.Item(cnt1).FindControl("ControlName"), Label)
Next



回答12:


               int a = grdvw.PageIndex;
               int rowcount=0;

                for (int i = 0; i < grdvw.PageCount; i++)
                {
                    grdvw.SetPageIndex(i);
                    foreach (GridViewRow row in grdvw.Rows)
                    {
                        if (row.RowType == DataControlRowType.DataRow)
                        {
                          rowcount++;
                        }
                    }
               }

             grdvw.SetPageIndex(a);


来源:https://stackoverflow.com/questions/5788329/count-total-rows-of-gridview-with-pagination

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!