Подсчитать общее количество строк gridview с нумерацией страниц - PullRequest
11 голосов
/ 26 апреля 2011

У меня есть GridView с подкачкой. Когда я пытаюсь сосчитать строку gridview с помощью gridview.rows.count, он дает мне количество строк только для текущей страницы.

Как получить общее количество строк GridView независимо от индекса страницы?

// Вот код страницы .aspx

<%@ 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>

// Это код моей страницы aspx.cs

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

Теперь я хочу отправить письмо всем тем кандидатам, чей флажок установлен. Я споткнулся так много вещей, но не получил никакого решения

Ответы [ 12 ]

18 голосов
/ 26 апреля 2011

, если вы используете sqldatasource или objectdatasource. При обработке события Selected источника данных необходимо использовать ReturnValue ObjectDataSourceStatusEventArgs или SqlDataSourceStatusEventArgs.

Если вы используете sqldatasource, вы можете подсчитать общее количество строк, используя событие 'Selected', которое запускается после завершения операции select.

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

Если вы используете объектВ источнике данных важно отметить, что событие Selected в ODS вызывается дважды, один раз возвращая набор данных, и снова для вызова метода, указанного в свойстве SelectCountMethod.Просто проверьте, является ли возвращаемое значение Int32 в событии.

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

Рабочий пример можно найти по адресу: http://www.webswapp.com/codesamples/aspnet20/dropdownlist_gridview/default.aspx

, если ваш GridView заполняетсяa DataSet или DataTable:

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

Если вы связываете список или массив объектов, вы можете сделать следующее:

int rowCount = ((Customer[])gv.DataSource).Count;
6 голосов
/ 26 апреля 2011

да, это правда, он будет возвращать только текущие строки страницы.Если вы действительно хотите получить общее количество строк, вам нужно получить данные из своего источника данных.

Как ... если у вас есть DataTable, тогда это будет похоже на ...

DataTable.Rows.Count
4 голосов
/ 26 апреля 2011

Да, я думаю, что использование PagedDataSource - лучший вариант.Я использую это.

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();
2 голосов
/ 06 ноября 2014

Попробуйте код ниже

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

Например, Вывод будет как ниже ....

Показано с 1 по 15 из 67 найденных записей.

1 голос
/ 18 июня 2014
            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;
1 голос
/ 26 апреля 2011

Вы можете использовать источник данных с постраничной привязкой для привязки вида сетки, и это будет очень просто для пользовательской подкачки и получения количества страниц.

0 голосов
/ 17 мая 2016
               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);
0 голосов
/ 24 марта 2015
<font-color='red'><b>dim dt as datatable<Br>
dt=gridview1.datasource<br>
msgbox (dt.rows.count)<b></font>
0 голосов
/ 09 марта 2015

Если вы выполняете привязку с использованием источника данных или другого источника данных, вы можете показать общее количество записей из источника данных.Например

  if (dtLog != null && dtLog .Rows.Count >= 0)
            {
                lblTotal.Text = "Total " + Convert.ToString(dtLog .Rows.Count) + " records.";
            }
0 голосов
/ 01 августа 2013

try (gridView.DataSource as IEnumerable ). Count () для основной коллекции

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...