PDA

View Full Version : بدست اوردن رکوردهای صفحه اخر در Paging دیتاگرید



nafisehk
شنبه 13 مهر 1392, 15:10 عصر
صفحه بندی دیتاگرید

بدست اورن 100 رکورد اول= select top 100 from Table
کوچکترین و بزرگترین id,و تعداد رکوردای خونده شده رو نگه میدارم
برای بدست اوردن صفحه بعد= select top 100 from Table where id>max
صفحه قبل= select top 100 from Table where id<min-count and id>min
صفحه اخر= ????

ممنون میشم دوستان راهنمایی بفرمایید

Mahmoud.Afrad
شنبه 13 مهر 1392, 16:21 عصر
ابتدا توسط یک کامند ، تعداد کل رکوردها رو بدست بیار.
_cmdGetTotalCount = new SqlCommand("SELECT COUNT(*) FROM [TableName]", _con);

private void CalculateTotalPages()
{
try
{
if (_con.State == ConnectionState.Closed)
{
_con.Open();
}

double totalRowCount = (int)_cmdGetTotalCount.ExecuteScalar();
this._totalPage =(int) Math.Ceiling(totalRowCount/_pageSize);
}
catch (Exception ex)
{
lblPageNumber.Text = ex.Message;
}
finally
{
if (_con.State != ConnectionState.Closed)
{
_con.Close();
}
}
}

_totalPage متغیری برای ذخیره تعداد کل رکوردهاست.

حالا برای گرفتن صفحات باید شماره صفحه حاضر رو در یک متغیر نگه داری. کافیه برای نمایش چک کنی صفحه درخواست شده از 1کمتر و از تعداد کل صفحات بیشتر نباشه سپس صفحه رو با کمک کوئری شبیه کد زیر بدست میاری و نمایش میدی:

private DataTable GetPage(int page)
{
DataTable dt = new DataTable();

if (page == 1)
{
_cmdGetData = new SqlCommand("SELECT TOP(@PageSize) * FROM [" + TableName + "]", _con);
_cmdGetData.Parameters.AddWithValue("@PageSize", _pageSize);
}
else
{
int PreviouspageLimit = (page - 1) * _pageSize;

_cmdGetData = new SqlCommand("SELECT TOP(@PageSize) * FROM [" + TableName + "] WHERE ID NOT IN (SELECT TOP(@PreviouspageLimit) ID FROM [" + TableName + "] )", _con);
_cmdGetData.Parameters.AddWithValue("@PageSize", _pageSize);
_cmdGetData.Parameters.AddWithValue("@PreviouspageLimit", PreviouspageLimit);
}

try
{
this._da.SelectCommand = _cmdGetData;
this._da.Fill(dt);
}
finally
{
_con.Close();
}

return dt;
}

_pageSize متغیریست که تعداد رکورد در هر صفحه را مشخص میکند.
البته اگر از کنترلهایی برای رفتن به صفحه بعد و قبل و ... استفاده کردی اونها رو هم باید کنترل کنی.