ページング付きの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);
}
}
ここで、チェックボックスがオンになっているすべての候補者にメールを送信します。
はい、そうです。現在のページ行のみを返します。本当に合計行数を取得したい場合は、代わりにデータソースから取得する必要があります。
のような...あなたがDataTableを持っているなら、それは次のようになります...
DataTable.Rows.Count
sqldatasourceまたはobjectdatasourceを使用している場合データソースのSelectedイベントを処理するときは、ObjectDataSourceStatusEventArgsまたはSqlDataSourceStatusEventArgsのReturnValueを使用する必要があります。
Sqldatasourceを使用している場合は、選択操作が完了した後に発生する「Selected」イベントを使用して合計行数をカウントできます。
protected void SqlDataSource1_Selected(object sender, SqlDataSourceStatusEventArgs e)
{
int rowCount = e.AffectedRows;
}
オブジェクトデータソースを使用している場合は、ODSのSelectedイベントが2回呼び出され、1回はデータセットを返し、もう一度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;
はい、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();
以下のコードを試してください
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を表示しています。
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;
ページングされたデータソースを使用してgridviewをバインドできます。これにより、カスタムページングが簡単になり、ページ数を取得できます。
このような
(gridview1.DataSource as DataTable).Rows.Count();
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);
<font-color='red'><b>dim dt as datatable<Br>
dt=gridview1.datasource<br>
msgbox (dt.rows.count)<b></font>
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
データテーブルまたは他のデータソースを使用してバインドしている場合は、データソースからの合計レコードを表示できます。例えば
if (dtLog != null && dtLog .Rows.Count >= 0)
{
lblTotal.Text = "Total " + Convert.ToString(dtLog .Rows.Count) + " records.";
}
メインコレクションの(gridView.DataSource as IEnumerable <object>)。Count()を試してください