PDA

View Full Version : شماره گذاری دیتاگرید صفحه بندی شده



juza66
شنبه 26 مهر 1393, 12:33 عصر
سلام


دوستان عزیز،
من اینطور صفحه بندی میکنم برای گریدویو، مشکلم شماره گذاری هستش که اشتباه ست !!



private OleDbDataAdapter da;
private DataSet ds;
private DataTable dtSource;
private int PageCount;
private int maxRec;
private int pageSize;
private int currentPage;

private int recNo;
//Dim conn As New OleDbConnection
string sSql;




private void LoadDS(string sSQL)
{
try
{
string cnString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Application.StartupPath + "\\dbsedaghat.mdb;Persist Security Info=False;Jet OLEDB:Database Password=@@ESI@@ALI@@";
//Open Connection.
OleDbConnection conn = new OleDbConnection(cnString);

//Set the DataAdapter's query.
da = new OleDbDataAdapter(sSQL, conn);
ds = new DataSet();

// Fill the DataSet.
da.Fill(ds, "Items");

// Set the source table.
dtSource = ds.Tables["Items"];


}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error...", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}



private void LoadPage()
{
int i = 0;
int startRec = 0;
int endRec = 0;
DataTable dtTemp = null;

//Duplicate or clone the source table to create the temporary table.
dtTemp = dtSource.Clone();

if (currentPage == PageCount)
{
endRec = maxRec;
}
else
{
endRec = pageSize * currentPage;
}

startRec = recNo;

if (dtSource.Rows.Count > 0)
{
//Copy the rows from the source table to fill the temporary table.
for (i = startRec; i <= endRec - 1; i++)
{
dtTemp.ImportRow(dtSource.Rows[i]);
recNo = recNo + 1;
}
}

DWG1.DataSource = dtTemp;

if (recNo <= 20)
{
int rowNumber = 1;
foreach (DataGridViewRow row in DWG1.Rows)
{
if (row.IsNewRow)
{
continue;
}
row.HeaderCell.Value = "" + rowNumber.ToString();
rowNumber++;
}
DWG1.AutoResizeRowHeadersWidth(DataGridViewRowHead ersWidthSizeMode.AutoSizeToAllHeaders);

}
else
{

int rowNumber = recNo;
foreach (DataGridViewRow row in DWG1.Rows)
{
if (row.IsNewRow)
{
continue;
}
row.HeaderCell.Value = "" + rowNumber.ToString();
rowNumber++;
}
DWG1.AutoResizeRowHeadersWidth(DataGridViewRowHead ersWidthSizeMode.AutoSizeToAllHeaders);
}


DisplayPageInfo();
}



private void FillGrid()
{
//Set the start and max records.
pageSize = 20;
//txtPageSize.Text
maxRec = dtSource.Rows.Count;
PageCount = maxRec / pageSize;

// Adjust the page number if the last page contains a partial page.
if ((maxRec % pageSize) > 0)
{
PageCount = PageCount + 1;
}

//Initial seeings
currentPage = 1;
recNo = 0;

// Display the content of the current page.
LoadPage();
}



دکمه Next


bool functionReturnValue = false;
//Check if the user clicks the "Fill Grid" button.
if (pageSize == 0)
{
MessageBox.Show("Set the Page Size, and then click the \"Fill Grid\" button!");
functionReturnValue = false;
}
else
{
functionReturnValue = true;
}
return functionReturnValue;




ایراد شماره گذاری اینجاست



if (recNo <= 20)
{
int rowNumber = 1;
foreach (DataGridViewRow row in DWG1.Rows)
{
if (row.IsNewRow)
{
continue;
}
row.HeaderCell.Value = "" + rowNumber.ToString();
rowNumber++;
}
DWG1.AutoResizeRowHeadersWidth(DataGridViewRowHead ersWidthSizeMode.AutoSizeToAllHeaders);

}
else
{

int rowNumber = recNo;
foreach (DataGridViewRow row in DWG1.Rows)
{
if (row.IsNewRow)
{
continue;
}
row.HeaderCell.Value = "" + rowNumber.ToString();
rowNumber++;
}
DWG1.AutoResizeRowHeadersWidth(DataGridViewRowHead ersWidthSizeMode.AutoSizeToAllHeaders);
}






recNo تعداد رکوردهای لود شده در دیتاگرید است

recNo <= 20 در اینجا گفتم اگه مساوی 20 تا بود یا کمتر int rowNumber = 1 قرار بده

و در ادامه اگر درست نبود از recNo بخون و شماره گذاری از اون شروع بشه


ایراد:
اولین صفحه از 1 تا 20 بدرستی شمارش می شن،
ولی دکمه next می زنم شمارش از 40 شروع میشه و بعد از 20 - 21 هستش نه 40


int rowNumber = recNo;

تشکر

jir_jir_jir
شنبه 26 مهر 1393, 16:19 عصر
یه فیلد بزار توی جدولت به نام ID وقتی 20 تارو لود می کنی بر اسال همون شماره می تونی الباقی رو لود کنی
البته تو دستورات sql می تونی برای گرفتن تعداد خاصی از رکرودها از LIMIT استفاده کنی

juza66
شنبه 26 مهر 1393, 16:30 عصر
تشکر از پاسختون جناب jir_jir_jir (http://barnamenevis.org/member.php?72691-jir_jir_jir)

من صفحه بندی رو براحتی انجام میدم، همه چی اوکیه ..
فقط با این کد می خوام شمارش رکوردها رو انجام بدم

جواب شما اوکیه ولی من بر اساس شناسه بیمار اطلاعات رو لود و ویا ویرایش و یا ثبت می کنم



int rowNumber = 1; foreach (DataGridViewRow row in DWG1.Rows)
{
if (row.IsNewRow)
{
continue;
}
row.HeaderCell.Value = "" + rowNumber.ToString();
rowNumber++;
}
DWG1.AutoResizeRowHeadersWidth(DataGridViewRowHead ersWidthSizeMode.AutoSizeToAllHeaders);




recNo تعداد لود رکوردها هستش
من تعداد لود اول که 20 تا تعریف کردم انجام میشه
تویی بار دوم 20 + 20 میشه دیگه میشه 40
اون موقع شمارش از 40 شروع میشه من میخوام از 21 شروع شه ...

jir_jir_jir
شنبه 26 مهر 1393, 16:40 عصر
خوب دوست من راه زیاده اگر می خوای تعداد خط کدهات پایین باشه و یا نه از لحاظ تعداد خطوط کد مشگلی نداری
20 تا رکورد رو می خونی بعد برای فراخوانی رکوردهای بعدی قطعه کد دیگه رو می نویسی من این کار رو قبلا انجام دادم
ببین من کد کوئری که برای فراخوانی تعداد رکوردام نوشتم اینه البته مال چند سال پیشه

string Query = "SELECT * FROM tbl_estelam_sales_mars WHERE ID < " + ID_Estelam + " AND Code_User LIKE '" + Program.Code_Namayande + "' LIMIT 10";

البته از merg کردن dataset هم استفاده کردم
حالا نمی دونم منظورتو و کاری که می خوای انجام بدی رو متوجه شدم یا نه

juza66
شنبه 26 مهر 1393, 16:51 عصر
تشکر بازم هم



بذارید کامل توضیح بدم


دیتابیس

|

فراخوانی کامل اطلاعات در دیتاست

|

اینجا قبل از اینکه بخوام بریزم تو دیتاگرید صفحه بندی رو انجام میدم.
مثلا 20 تا رکورد اول

|

دکمه next
تعداد رکورد هربار 20 تا نمایش میدم

20 تا اولی

20 تا دومی

|

تا اینجا درست عمل میکنه صفحه بندی مشکل نداره
عملیات next و back درست انجام میشه

|


اینجا می خوام هر بار که دیتاگرید لود میشه شماره گذاری انجام میدم

شمارش 1 تا 20 اول

|

الان اینجا باید شمارش انجام بشه بگه 21 تا 40 درسته؟!

|

اینجا من از کد زیر استفاده میکنم برای شماره گذاری در دیتا گرید


int rowNumber = 1; foreach (DataGridViewRow row in DWG1.Rows)
{
if (row.IsNewRow)
{
continue;
}
row.HeaderCell.Value = "" + rowNumber.ToString();
rowNumber++;
}
DWG1.AutoResizeRowHeadersWidth(DataGridViewRowHead ersWidthSizeMode.AutoSizeToAllHeaders);





|

نحوه محاسبه اینجا رو می خوام



int rowNumber = recNo;

تعداد رکوردها دومی با recNO میشه 40 - 60
اینجا نباید 40 بشه باید بشه 21 تا 40

juza66
یک شنبه 27 مهر 1393, 17:36 عصر
سلام دوستان

این سورس بنده
http://charp.persiangig.com/datagridviewpaging.zip



میخواستم با این کد شماره گذاری کنم


int rowNumber = 1;
foreach (DataGridViewRow row in DWG1.Rows)
{
if (row.IsNewRow)
{
continue;
}
row.HeaderCell.Value = "" + rowNumber.ToString();
rowNumber++;
}
DWG1.AutoResizeRowHeadersWidth(DataGridViewRowHead ersWidthSizeMode.AutoSizeToAllHeaders);

اگر کسی هست میتونه کمک برسونه دریغ نکنه

تشکر