PDA

View Full Version : سوال: مرتب کردن رکوردها بر حسب ID



mohsencom
جمعه 20 اسفند 1389, 17:22 عصر
با سلام
سوالمو بصورت یه مثال میگم...فرض کنید من رکوردامو تو دیتاگریدویو نشون میدم که یکی از فیلدها ID هست...حالا مثلا 3 تا رکورد دارم...رکورد دوم که IDش 2 هست رو حذف میکنم...حالا هر وقتی دیتاگریدویو رو نمایش میدم رکوردهایی با ID مساوی 1 و 3 میبینم...چطوری میتونم رکوردها رو مرتب کنم که مثلا بجای رکورد با آیدی 1 و 3، رکورد با آیدی 1 و 2 ببینم؟
درضمن بانک من SQL هست.
لطفا کمکم کنید.

reza_edu
شنبه 21 اسفند 1389, 00:02 صبح
خوب اول بايد بدونيم كه ركورد حذف شده فقط تو ديتاسورس ديتا گريد حذف ميشه يا اينكه از ركورد هاي ديتابيس هم حذف ميشه ؟ فعلا دوتا راه ميگم كه ميشه اين كار رو انجام داد 1. استفاده ار خاصيت سورت(مرتب كردن ) خود ديتا گريد 2. اين كه اطلاعات رو اول تو ديتا ويو بريزي بعد اون رو سورت كني با فيلد مورد نظر بعد تو ديتا گريد ويو بريزي بيشتر بگو ميخواي چيكار كني تا بهتر بشه راهنمائي كرد البته فكر كنم همين دوتا مورد كافي باشه و كارت رو راه بندازه :متفکر: اگه كد نميزارم بخاطر اينكه به احتمال قوي كارت با اولي را بيوفته اگه نشود بگو تا كد بزارم.

mohsencom
شنبه 21 اسفند 1389, 01:05 صبح
مرسی دوست عزیز
راستش اطلاعات از دیتابیس هم حذف میشه...روش اول که کار نمیکنه چون حذف از دیتابیس شده...واضح تر بگم اینکه اگه از بین پنج تا رکورد با آیدی های 1 و 2 و 3 و 4 و 5 من رکورد با آیدی 3 رو حذف کنم(حذف از دیتابیس) "بجای اینکه" در دیتاگرید ویو رکوردهارو به ترتیب بصورت رکورد با " آیدی 1 و 2 و 4 و 5 " نشون بده،میخوام بصورت سورت شده رکوردها با آیدی 1 و 2 و 3 و 4 نشون بده...امیدوارم منظورمو واضح بیان کرده باشم...در مورد روش دوم اگه یه دو سه خط کد بذاری ممنون میشم

omid-vbAuto
شنبه 21 اسفند 1389, 05:05 صبح
مرسی دوست عزیز
راستش اطلاعات از دیتابیس هم حذف میشه...روش اول که کار نمیکنه چون حذف از دیتابیس شده...واضح تر بگم اینکه اگه از بین پنج تا رکورد با آیدی های 1 و 2 و 3 و 4 و 5 من رکورد با آیدی 3 رو حذف کنم(حذف از دیتابیس) "بجای اینکه" در دیتاگرید ویو رکوردهارو به ترتیب بصورت رکورد با " آیدی 1 و 2 و 4 و 5 " نشون بده،میخوام بصورت سورت شده رکوردها با آیدی 1 و 2 و 3 و 4 نشون بده...امیدوارم منظورمو واضح بیان کرده باشم...در مورد روش دوم اگه یه دو سه خط کد بذاری ممنون میشم

دوست عزیز خودتون رو با نمی دونم روش اول و دوم و این حرف ها اواره نکنید!!!
جوابش اینه:جهش اطلاعات یا همان شیفتینگ.تو تاپیکها نگاه کنید برا یکی از بچه ها که همین مشکل رو داشت توضیح دادم.

reza_edu
شنبه 21 اسفند 1389, 12:32 عصر
يه سوال دوست عزيز شما Id رو مگه كليد اصلي(پرايمري كي ) در نظر نميگيريد ؟ به نظر من دو مانع براي استفاده از شيفت كردن ID وجود داره 1. كليد اصلي در نظر گرفتن 2. استفاده بعنوان كليد خارجي

شما اين فيلد رو به چه صورت تعريف كرديد اين فيلد كليد اصلي هست يا نه؟ بعنوان كليد خارجي يا فارنكي كي استفاده شده يا نه؟

اينم يه نگاه كن http://barnamenevis.org/showthread.php?175116-%D9%8E%D8%B4%DB%8C%D9%81%D8%AA- (http://barnamenevis.org/showthread.php?175116-%D9%8E%D8%B4%DB%8C%D9%81%D8%AA-%D8%AF%D8%A7%D8%AF%D9%86-%D8%A7%D8%B7%D9%84%D8%A7%D8%B9%D8%A7%D8%AA)
%D8%AF%D8%A7%D8%AF%D9%86-%D8%A7%D8%B7%D9%84%D8%A7%D8%B9%D8%A7%D8%AA (http://barnamenevis.org/showthread.php?175116-%D9%8E%D8%B4%DB%8C%D9%81%D8%AA-%D8%AF%D8%A7%D8%AF%D9%86-%D8%A7%D8%B7%D9%84%D8%A7%D8%B9%D8%A7%D8%AA)

و اين http://barnamenevis.org/showthread.php?120913-%DA%A9%D8%AF-%D8%AF%D8%A7%D8%AF%D9%86-%D8%A8%D9%87-%D8%A7%D9%81%D8%B1%D8%A7%D8%AF-%D8%A8%D9%87-%D8%AC%D8%A7%DB%8C-auto-number

mohsencom
شنبه 21 اسفند 1389, 15:14 عصر
مرسی از محبتتون

id من کلید اصلی هست و کلید خارجی ندارم و بصورت autonumber هست...همونطور از تاپیک های مربوطه و راهنمایی شما فهمیدم بدلیل کلید اصلی بودن نمیتونم اطلاعات رو شیفت بدم و حتی اگه از روش کلید اصلی رو بردارم شیفت دادن اطلاعات بسیار هزینه بر هست و باعث کندی برنامه من میشه...تنها فکری که به ذهنم میرسه اینه که یجوری قبل از اینکه id جدید بصورت خودکار برای ثبت تولید بشه از یک تابع برای جستجوی idهای قبلی که null شده استفاده کنیم طوری که این تابع کمترین مقدار id نال شده رو در صورت وجود پیدا کنه و به ما بده تا در رکورد مربوطش اطلاعاتمونو ذخیره کنیم....اگه همچین تابعی رو میتونین بنویسین و اینجا بذارین که واقعا ممنون میشم..اگرم نشد که خودم سعی میکنم و روش فکر میکنم ببینم میتونم ین تابع رو بنویسم یا نه....به هر حال از لطفتون ممنونم

DoDoklak
یک شنبه 22 اسفند 1389, 10:49 صبح
شما میتونید ردیف رو به دیتا گرید اضافه کنید به تصویر زیر نگاه کنید

http://up.p30day.com/images/71126315742747869378.png

جهت انجام اینکار میتوانید از رویداد RowPostPaint مربوط به دیتا گرید استفاده کنید



Private Sub DGV_RowPostPaint(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewRowPostPaintEvent Args) Handles DGV.RowPostPaint
Using b As SolidBrush = New SolidBrush(DGV.RowHeadersDefaultCellStyle.ForeColo r)
e.Graphics.DrawString("رديف", DGV.DefaultCellStyle.Font, b, DGV.Size.Width - 40, 6)
e.Graphics.DrawString(e.RowIndex + 1, DGV.DefaultCellStyle.Font, b, e.RowBounds.Location.X + DGV.Size.Width - 40, e.RowBounds.Location.Y)
End Using
End Sub


با این کد حتی اگر دیتا گرید هم تغییر اندازه بدهد باز هم ردیف ها در سر جای خود خواهند ماند

mohsencom
دوشنبه 23 اسفند 1389, 01:01 صبح
مرسییییی دوست عزیز...این کار تا حدود زیادی کارمو راه میندازه...البته این کار بعلاوه کاری که من گفتم یعنی استفاده از یک تابع برای پیدا کردن کمترین مقدار یا اندیسی که در بین IDها حذف شده و درج اون به عنوان ID برای رکوردی که میخواهیم ثبت کنیم ""یا"" اینکه هر بار رکوردی رو که حذف میکنیم،ID مربوطشو در یک جدول ذخیره کنیم و هنگام ثبت رکورد قبل از فراخوانی تابع autonumber از یک تابع که کمترین مقدار در جدول IDهای حذف شده رو برگردونه استفاده کنیم تا تمامی رکوردامون به ترتیب ثبت شده باشن.البته این تابع باید همزمان با برگردوندن مقدار اون IDرو از جدول IDهای حذف شده پاک کنه تا دوباره فراخوانی نشه. این کار ایده من بود و فکر میکنم کاملا عملی هست.
اگه دوستان باز هم راهی به نظرشون میرسه ممنون میشم بگن....
ولی فکر کنم همین دوتا راه بیشتر مشکلاتو حل میکنه و دیگه نیازی به شیفت اطلاعات هم نباشه

reza_edu
دوشنبه 23 اسفند 1389, 10:50 صبح
اگه برات تاريخ ثبت مهم نيست اين كار رو انجام بده وگرنه به نظر من نه، نميدونم برنامت چيه و چه چيزي هدفش هست اما دوست عزيز بعضي موقع ها اين مهمه كه يه ركورد اطلاعات كي و توسط چه كسي ثبت شده . نظر من اينه كه شما يه فيلد در نظر بگيد كه كليد اصلي هم نباشه حالا به ترتيب ثبت بهش شماره مورد نظر رو بده زماني هم كه ركوردي حذف شد از همون روش شيفت دادن استفاده كن اينجوري ترتيب ورود اطلاعات نيز بهم نميخوره بار اين كار هم يك sp بنويس كه تو داده هار حجيم سرعت برنامه كم نشه بهتر عمل چك كردن رو هر بار بعد از حذف انجام بدي.

mohsencom
دوشنبه 23 اسفند 1389, 20:05 عصر
کاملا باهات موافقم دوست عزیز...البته برای برنامه من تاریخ ثبت مهم نیست و شما اشاره خوبی کردی....استفاده از SP هم کاملا میتونه عملی و بهتر باشه برای راحتی کار....
ممنون از همه دوستان...خوشحال شدم از نظرات خوبتون...دست همتون درد نکنه،مرسیییییییی