我有一个带分页的GridView。当我尝试使用gridview.rows.count计算gridview行时,它仅为当前页面提供行计数。
如何获取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>
</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">
<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>
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">
</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>
</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>
</td>
</tr>
<tr>
<td>
</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);
}
}
现在我想向所有选中复选框的候选人发送邮件。 我做了很多事情,但没有得到任何解决方案
答案 0 :(得分:18)
如果您正在使用sqldatasource或objectdatasource您需要在处理数据源的Selected事件时使用ObjectDataSourceStatusEventArgs或SqlDataSourceStatusEventArgs的ReturnValue。
如果您使用的是sqldatasource,则可以使用'Selected'事件计算总行数,该事件在select操作完成后被触发。
protected void SqlDataSource1_Selected(object sender, SqlDataSourceStatusEventArgs e)
{
int rowCount = e.AffectedRows;
}
如果您正在使用对象数据源,请务必注意ODS上的Selected事件在返回数据集后会被调用两次,并再次调用您在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被DataSet或DataTable填充:
int rowCount=((DataTable)Customer).Rows.Count;
如果要绑定列表或对象数组,则可以执行以下操作:
int rowCount = ((Customer[])gv.DataSource).Count;
答案 1 :(得分:6)
是的,这是真的,它只会返回当前的页面行。如果您真的想获得总行数,则需要从数据源获取。
喜欢......如果你有DataTable,那就像......
DataTable.Rows.Count
答案 2 :(得分:4)
是的我认为使用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();
答案 3 :(得分:2)
尝试以下代码
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);
例如输出将如下所示....
显示找到67条记录中的1到15条。
答案 4 :(得分:1)
您可以使用分页数据源来绑定gridview,这将非常容易进行自定义分页并获取页数。
答案 5 :(得分:1)
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;
答案 6 :(得分:0)
如果您使用gridview
或datatable
填充dataset
,请计算datatable
或dataset
(ds.table(0).rows.count
)
例如
For cnt1 = 0 To Total_batchRecords - 1
dgchgsdtl1.Rows.Item(cnt1).FindControl("ControlName"), Label)
Next
答案 7 :(得分:0)
喜欢这个
(gridview1.DataSource as DataTable).Rows.Count();
答案 8 :(得分:0)
尝试(gridView.DataSource为IEnumerable&lt; object&gt;)。主集合的Count()
答案 9 :(得分:0)
如果使用数据表或其他数据源进行绑定,则可以显示数据源中的总记录。 例如
if (dtLog != null && dtLog .Rows.Count >= 0)
{
lblTotal.Text = "Total " + Convert.ToString(dtLog .Rows.Count) + " records.";
}
答案 10 :(得分:0)
<font-color='red'><b>dim dt as datatable<Br>
dt=gridview1.datasource<br>
msgbox (dt.rows.count)<b></font>
答案 11 :(得分:0)
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);