PDA

View Full Version : سوال: paging یا همون صفحه بندی اطلاعات



mahdidabaghi
پنج شنبه 12 مرداد 1391, 23:26 عصر
سلام مجدد
در مورد مطلب paging یا همون صفحه بندی کردن اطلاعات و فرستادن اون از سمت db به برنامه بالاخره یه کد تونستم گید بیارم ولی حالا مشکلم اینه که میخام پروسیجر خودمو که تو db هس بفرستم به برنامه

SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrin gs["MirasConnectionString"].ConnectionString);

//Set the DataAdapter's query.
da = new SqlDataAdapter("select * from First_Pic", conn);
ds = new DataSet();

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

//Set the source table.
dtSource = ds.Tables["info"];
یعنی بجای select * from First_Pic پروسیجری با همین نام که تو db هست رو اجرا کنم
میشه منو راهنمایی کنین قطعه کد بالا رو چه تغییری باید بدم؟
ممنون از شما

nilmil_nil
پنج شنبه 12 مرداد 1391, 23:46 عصر
به جای دستور SELCT این رو ینویس

"EXEC SELECTSTUDENTS"

Mahmoud.Afrad
پنج شنبه 12 مرداد 1391, 23:49 عصر
میتونی بنویسی exec SP_Name .
یا اینکه نوع کامند را روی storedprocedure تنظیم کنید در این حالت فقط نام sp را باید به جای کامند بذارید.

mahdidabaghi
جمعه 13 مرداد 1391, 00:02 صبح
ممنون یه تستی میکنم ببینم چی میشه

mahdidabaghi
جمعه 13 مرداد 1391, 11:22 صبح
سلام مجدد به همه دوستان گل خودم
یه کد میذارم خدمتتون میخام از این select که 50000 رکورد نو تیبل هست فقط 100 تا نشون بده (میخام سمت برنامه این کارو انجام بدم و نه با select top))
شاید با این کار و تلفیق با نخ ها و sleep بشه pagging رو انجام داد.

MyClass Mc = new MyClass();
Mc.Doreh = CmbDore.Text;
DataTable DTDoreh = Mc.Select_RDoreh();
elDataGridView1.DataSource = DTDoreh;
و

public DataTable Select_RDoreh()
{
SqlConnection myconection = new SqlConnection(ConfigurationManager.ConnectionStrin gs["MirasConnectionString"].ConnectionString);
DataTable dt = new DataTable();
SqlCommand mycommand = new SqlCommand();
mycommand.CommandType = CommandType.StoredProcedure;
mycommand.Connection = myconection;
mycommand.CommandText = "Select_RDoreh";
mycommand.Parameters.AddWithValue("@Name_Doreh", Doreh);
try
{
myconection.Open();
dt.Load(mycommand.ExecuteReader());
return dt;
}
catch
{
return null;
}
finally
{
myconection.Close();
}
}
همون جور که گفتم میخام فقط تو گرید 100 تا رکورد نشون داده بشه نه همه 50000 تا.
ممنون میشم اگه راهنماییم کنین

mahdidabaghi
جمعه 13 مرداد 1391, 14:31 عصر
لطفا یه استادی پیدا شه بگه راه حلو

Mahmoud.Afrad
جمعه 13 مرداد 1391, 19:50 عصر
paging در sqlserver انجام بشه خیلی بهتره که
http://uplod.ir/rpddf4m6170h/Paging_in_DataGridView.rar.htm

mahdidabaghi
شنبه 14 مرداد 1391, 00:02 صبح
مرسی از پاسختون
ولی در کل اگه من خواسته باشم فقط 1000 تا رکوردو تو برنامم و با استفاده از کد های برنامم (نه سمت دیتابیس) انجام بدم یعنی همون سوال بالا
میشه اصلا همچین کاری رو انجام داد یا نه؟
اگه اره اون کد رو چه تغییری باید بدم؟

Mahmoud.Afrad
شنبه 14 مرداد 1391, 00:56 صبح
یک دیتاتیبل دیگه ایجاد کنید. اگر این دیتاتیبل خالی بود 1000 تای اولو کپی کنید توش. یک متغیر هم برای شماره صفحه.
شماره صفحه ضرب در تعداد رکورد در هر صفحه میشه تعداد رکوردهای پیمایش شده که اگر از تعداد کل کمتر بود میتونه به صفحه بعد بره.
برای صفحه بعد هم از شماره صفحه فعلی ضزبدر تعداد رکورد در هر صفحه بعلاوه یک به تعداد 1000 تا از دیتایبل اول میخونید میریزی توی دیتاتیبلی که به گرید بایند شده.

این راهی بود که به نظرم میرسه.

mahdidabaghi
شنبه 14 مرداد 1391, 01:26 صبح
مرسی ولی مشکل روش شما اینه که اول کل اطلاعات لود میشه و بعد من میام 100 تا رکورد اولو تو دیتاتیبل میریزم(البته اگه روش شمارو درست متوجه شدم که این کار مستلزم زمان زیادی میشه و من واسه همین میخام فقط 100 تا رکوردو نشون بدم)
بازم اگه من اشتباه میکنم شما بنده رو راهنمایی کنین و اگه میشه با کد توضیح بدین
خیلی ممنون و تشکر فراوون از شما

Mahmoud.Afrad
شنبه 14 مرداد 1391, 03:50 صبح
می بخشید شما نمیخوای از sql استفاده کنی و نمیخوای کل اطلاعاتو بگیری و صفحه بندی کنی پس میخوای چه کار کنی؟؟!!!

hamid_hr
شنبه 14 مرداد 1391, 10:05 صبح
شما میتونی از table.Select استفاده کنی البته منم دقیق بلد نیستم ولی برو دنبالش پیداش میکنی
http://www.dotnetperls.com/datatable-select

Mahmoud.Afrad
شنبه 14 مرداد 1391, 10:38 صبح
شما میتونی از table.Select استفاده کنی البته منم دقیق بلد نیستم ولی برو دنبالش پیداش میکنی
http://www.dotnetperls.com/datatable-select
این روش فیلتر کردن دیتاتیبل هست و باز هم باید همه اطلاعات را لود کنند توی دیتاتیبل و بعد فیلتر کنند. برای استفاده برای صفحه بندی باید یک فیلد شماره ردیف(غیر از کلید اصلی) داشته باشید تا بتوانید صفحه بندی کنید(ولی بالاخره باید همه اطلاعات سلکت بشه)select ROW_NUMBER() over(order by id asc) as rownumber ,* from tbl_nameنتیجه این کوئری رو بریزید توی دیتاتیبل و هر بار براساس شماره ردیف مثلا 100 تا 100 تا فیلتر کنید.

mahdidabaghi
شنبه 14 مرداد 1391, 11:10 صبح
دوست عزیزم mafaman
بذارین اینجوری بگم :
کاربرای من میخان یه گزارش کلی بگیرن از 50000 تا رکورد 60 فیلدی که 4 تا شم عکسه!!!!!!!!!!!
که اینا باید تو کریستال ریخته بشه.حالا اگه همش باهم همون اول لود شه که واویلایه و سرعت میااد پایین
حالا من میخام 100 تا 100 تا بفرسته.تو نت یه کد واسه paging گرید پیدا کردم و که همه کدهاش سمت برنامه paging رو انجام میده.میخاستم اونو یه دستی روش بکشم تا همه اطلاعاتو با هم لود نکنه.این شد که اون کدو گذاشتم.
حالا اگه شما بلدین روششو به زحمت یه sample بذارین خیلی ممنون میشم.

Mahmoud.Afrad
شنبه 14 مرداد 1391, 11:22 صبح
کد پست5 میگی؟؟ خوب اون داره یک storedprocedure رو اجرا میکنه که حتما کوئری صفحه بندی توی اونه(یعنی paging داره توسط sql انجام میشه نه توی برنامه. شما اشتباه متوجه شدی)
اون برنامه ای هم که من گذاشتم همینطور هست دیگه منتها sp نداره و توی برنامه کوئری رو ساخته و اجرا میکنه.
کلا paging در برنامه معنی نداره و بایستی در sql انجام بشه.

mahdidabaghi
یک شنبه 15 مرداد 1391, 01:36 صبح
میشه یه sample از pagging که سمت دیتابیس باشه بذارین؟
و آیا میشه یه select تو دیتابیس نوشت که بگه مثلا از رکورد های 500 تا 700 رو برگردونه؟

mahdidabaghi
یک شنبه 15 مرداد 1391, 11:42 صبح
سلام لینکی که شما گذاشتین وقتی واردش میشم واسه دانلوذ این ارورو میده
Error happened when generating Download Link.
Please try again or Contact administrator
.اگه میشه اونو همینجا اپلودش کنین
بازهم بی نهایت ازتون ممنونم

mahdidabaghi
دوشنبه 16 مرداد 1391, 11:00 صبح
به جای دستور SELCT این رو ینویس

"EXEC SELECTSTUDENTS"

سلام میشه بگین چجور میتونم یه پارامتر رو هم به سمت دیتابیس بفرستم؟
اگه میشه اون کد پست 1 رو اصلاح کنین
مرسی