PDA

View Full Version : حرفه ای: مرتب کردن کلیداصلی بعد از حذف برخی از رکوردها



safa.net
چهارشنبه 25 فروردین 1395, 14:59 عصر
با سلام
حتما برای خیلی از کسانی که برنامه می نویسند پیش اومده که در دیتابیس خودشون جداولی دارند که از یک فیلد به نام ID که بصورت خودکار شماره می زنه استفاده می کنند تا اطلاعاتی را ثبت، ویرایش یا حذف کنند.
مشکل اول : فرض کنید رکود های ما شماره های ردیف 1و2و3و4و5و... را داشته باشند. پس از حذف مثلا ردیف 2و3 شماره های باقیمانده می شود 1و4و5. حال ترتیب شماره ردیف ها بهم خورده است و یک سری از شماره ها از بین می رود. چطور می توانیم دوباره آنها را مرتب کنیم ؟ آیا اصلا شدنی هست؟ یا باید کد خاصی دوباره بنویسیم؟

abdullah20
چهارشنبه 25 فروردین 1395, 16:07 عصر
سلام
شدن که میشه
ولی یکم دردسر داره
بهتره بیخیال بشید دوست عزیز

safa.net
پنج شنبه 26 فروردین 1395, 05:36 صبح
سلام
شدن که میشه
ولی یکم دردسر داره
بهتره بیخیال بشید دوست عزیز

لطفا اگر راه خاصی می شناسید بفرمایید. بی خیال شدن راه خوبی به نظر نمی رسد!

ژیار رحیمی
پنج شنبه 26 فروردین 1395, 05:43 صبح
دوست گرامی یک فیلد اضافه برای مرتب سازی به جدولت اضافه کن به نظر من آسون ترین راه.بعد از حذف کافی مقادیر ستون(اضافه شده)را با یه حلقه for از یک تا تعداد سطرهای جدول دوباره مقدار دهی کنی

amirc901
پنج شنبه 26 فروردین 1395, 07:26 صبح
به نظر من اگه از sql یا oledb استفاده میکنی و میخوای فقط کاربر دیتابیسو مرتب ببینه از تابع row_number استفاده کن و کلید اصلیو به کاربر نشون نده
select ROW_NUMBER() over (order by ID) as ID,* from dbo.Infos
ولی خوب به هر حال اگه خواستی بازم مرتبش کنی یه حلقه بنویس از اون رکوردی که حذف شده شروع کنه بعد اون رکورد فیلد های ای دی رو یدونه کم کنه !!
که اینم باز بهتره به شکل پروسیجر نوشته بشه که کلا یه پروسیجر delete بنویسی که با گرفتن شماره ی سطر اونو حذف و مرتبش کنه

safa.net
پنج شنبه 26 فروردین 1395, 12:10 عصر
به نظر من اگه از sql یا oledb استفاده میکنی و میخوای فقط کاربر دیتابیسو مرتب ببینه از تابع row_number استفاده کن و کلید اصلیو به کاربر نشون نده
select ROW_NUMBER() over (order by ID) as ID,* from dbo.Infos
ولی خوب به هر حال اگه خواستی بازم مرتبش کنی یه حلقه بنویس از اون رکوردی که حذف شده شروع کنه بعد اون رکورد فیلد های ای دی رو یدونه کم کنه !!
که اینم باز بهتره به شکل پروسیجر نوشته بشه که کلا یه پروسیجر delete بنویسی که با گرفتن شماره ی سطر اونو حذف و مرتبش کنه
تشکر از راهنمایی شما
اگه میشه پروسیجر رو هم مثال بزنید. آیا میشه ROW_NUMBER() را در گرید به کاربر نمایش داد و عملیات را با id انجام داد ؟

mrprestige
پنج شنبه 26 فروردین 1395, 12:23 عصر
با سلام
حتما برای خیلی از کسانی که برنامه می نویسند پیش اومده که در دیتابیس خودشون جداولی دارند که از یک فیلد به نام ID که بصورت خودکار شماره می زنه استفاده می کنند تا اطلاعاتی را ثبت، ویرایش یا حذف کنند.
مشکل اول : فرض کنید رکود های ما شماره های ردیف 1و2و3و4و5و... را داشته باشند. پس از حذف مثلا ردیف 2و3 شماره های باقیمانده می شود 1و4و5. حال ترتیب شماره ردیف ها بهم خورده است و یک سری از شماره ها از بین می رود. چطور می توانیم دوباره آنها را مرتب کنیم ؟ آیا اصلا شدنی هست؟ یا باید کد خاصی دوباره بنویسیم؟

سلام دوست من ، به نظر من شما یه دیتا گرید روی صفحه فرم لود بزار (برای نمایش اطلاعاتت) روی دیتا گرید در قسمت Edit Column کلیک کن روی دکمه ADD کلیک کن صفحه ای مربوط به اضافه کردن ستون باز میشه قسمت بالای صفحه دوتا گزینه هست یکی با مضمون Data Bound Column و اون یکی Unbound Column شما دومی رو انتخاب کن و در قسمت Header Text نام ستون رو برابر " ردیف" قرار بده و جابجاش کن بیارش اولین ستون قرارش بده و ok کن و بعد روی دیتاگرید کلیک کن تو قسمت Event برو به قسمت Cell Formating و داخلش این خط کد رو بنویس



Datagridview1.Rows[e.RowIndex].Cells[0].Value=e.RowIndex+1;


بعد که برنامه رو اجرا کنی رکورد ها مرتب شده حتی اگه از هر چندتا رکورد هم پاک کنی بازم براساس ردیف مرتب نمایش داده میشن . پیروز و موفق باشی .

یا علی

amirc901
پنج شنبه 26 فروردین 1395, 15:02 عصر
تشکر از راهنمایی شما
اگه میشه پروسیجر رو هم مثال بزنید. آیا میشه ROW_NUMBER() را در گرید به کاربر نمایش داد و عملیات را با id انجام داد ؟

شما بگو دیتا بیستون چیه ؟