PDA

View Full Version : سوال: تغییر شماره ردیف



ali.ghodrati
شنبه 03 بهمن 1388, 11:17 صبح
سلام دوستان
سوالمو این جوری مطرح می کنم.


یک جدول با اطلاعات مربوط به اشخاص که در اون ثبت شده و کلید اون هم شماره ردیفشه
یک دیتاگرید که این اطلاعات رو نمایش میده
کلید حذف

می خوام وقتی یه مورد حذف میشه به طور اتومات شماره ردیفهام مجددا در دیتابیس مرتب بشه و جای اون مورد پاک شده رو پر کنه
مثال
1 -علی
2 -رضا
3 -حمید
4 -حسین حذف شود
5 - کاظم
6 -رامین
اعداد به صورت زیر مرتب بشه و در دیتابیس ذخیره بشه
-علی
2 -رضا
3 -حمید
4 -کاظم
5 - رامین

slashslash2009
شنبه 03 بهمن 1388, 12:07 عصر
باید کد نویسی کنی و با دستور update شماره هارو از نو کنید .
تعداد سطرهای جدولتونو بدست بیارید در یک حلقه مثلا for به شماره سطر اولی برید و به ترتیب اون سلولو رو update کنید از شماره یک تا آخری که میشه تعداد سطرهاتون.
البته فکر کنم در اکسس میشد auto number برای فیلد در نظر گرفت

Yasersadegh
شنبه 03 بهمن 1388, 12:27 عصر
سلام دوستان

سلام دوستان
سوالمو این جوری مطرح می کنم.


یک جدول با اطلاعات مربوط به اشخاص که در اون ثبت شده و کلید اون هم شماره ردیفشه
یک دیتاگرید که این اطلاعات رو نمایش میده
کلید حذف

می خوام وقتی یه مورد حذف میشه به طور اتومات شماره ردیفهام مجددا در دیتابیس مرتب بشه و جای اون مورد پاک شده رو پر کنه
مثال
1 -علی
2 -رضا
3 -حمید
4 -حسین حذف شود
5 - کاظم
6 -رامین
اعداد به صورت زیر مرتب بشه و در دیتابیس ذخیره بشه
-علی
2 -رضا
3 -حمید
4 -کاظم
5 - رامین

دوست عزيز كار شما با روشي كه دوستمون slashslash2009 فرمودند قابل انجام هست ولي اينكه شما شماره رديف رو به عنوان كليد در نظر گرفتيد از نظر اصول مهندسي نرم افزار كار اشتباه و غير اصولي است!!:اشتباه:
شما مي تونيد شماره ID هر شخص رو كليد در نظر بگيريد و هر جا كه خواستيد در گريدويو نمايش بديد يه ستون رديف خودتون دستي اضافه كنيد تا هنگام نمايش رديف ها نشان داده شود!!( نه اينكه در بانك ذخيره كنيد!)
موفق باشيد:چشمک:

hamidreza20
شنبه 03 بهمن 1388, 13:57 عصر
سلام دوستان


دوست عزیز کار شما با روشی که دوستمون slashslash2009 فرمودند قابل انجام هست ولی اینکه شما شماره ردیف رو به عنوان کلید در نظر گرفتید از نظر اصول مهندسی نرم افزار کار اشتباه و غیر اصولی است!!:اشتباه:
شما می تونید شماره ID هر شخص رو کلید در نظر بگیرید و هر جا که خواستید در گریدویو نمایش بدید یه ستون ردیف خودتون دستی اضافه کنید تا هنگام نمایش ردیف ها نشان داده شود!!( نه اینکه در بانک ذخیره کنید!)
موفق باشید:چشمک:

سلام دوست عزیز

روشی که دوستمون گفتند درسته اینکار رو انجام بدید.

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

التماس دعا...

slashslash2009
شنبه 03 بهمن 1388, 14:05 عصر
یه ستون ردیف خودتون دستی اضافه کنید تا هنگام نمایش ردیف ها نشان داده شودمیشه اینو توضیح بدین . وقتی یک ستون تعریف کردیم چیکار کنیم که در اون شماره سطرهارو نشون بده البته میشه از یک متغیر استفاده کرد و در اون ستون قرار داد منظورتون همین بوده

seven7777777
شنبه 03 بهمن 1388, 20:53 عصر
dgv.rows[e.rowindex].cells["rownum"].value = e.rowindex + 1;
کد بالا رو در رویداد cellformmating بنویسید . اسم ردیف جدید که قراره توش شماره ردیف درج بشه هم rownum هست . با هر اضافه و حذفی ترتیب به هم نمی خوره .

ali.ghodrati
شنبه 03 بهمن 1388, 23:19 عصر
لطفا برام بگین که چه جوری فیلد ردیف رو توی دیتابیس وقتی یکی پاک میشه دوباره مرتبش کنم. کدش رو برام بزارین.ممنون

slashslash2009
یک شنبه 04 بهمن 1388, 00:00 صبح
datatable.rows.count میشه تعداد سطرهاتون یا datagridview.rows.count

CYCLOPS
یک شنبه 04 بهمن 1388, 05:45 صبح
http://www.c-sharpcorner.com/UploadFile/santowebster/AutonumberingDatatable12102008090717AM/Images/AutonumberingDataTableSampleForm.png


به لینک زیر یه نگاه بنداز
تو تصویر بالا ستون S.NO. اصلا تو بانک نیست بلکه فقط برای نمایش سریال به کاربر ایجاد میشه


How to : Add an autonumber column in a DataGridView (http://www.c-sharpcorner.com/UploadFile/santowebster/AutonumberingDatatable12102008090717AM/AutonumberingDatatable.aspx)

slashslash2009
یک شنبه 04 بهمن 1388, 09:45 صبح
شاید ایشون واقعا لازم دارن که یه همچین چیزی داشته باشن در جدولشون

CYCLOPS
یک شنبه 04 بهمن 1388, 10:06 صبح
خوب در مورد اون بحثی نیست موضوع اینه که دلیلی نداره حتما همون فیلد به عنوان شماره سریال یه همچین چیزی به کاربر نشون داده بشه تا در زمان حذفش همچین مشکلی پیش بیاد

ali.ghodrati
یک شنبه 04 بهمن 1388, 12:28 عصر
من واقعا مجبورم همچین کاری بکنم.کسی که گفته براش بنویسم اینو از می خواد که وقتی یکی پاک شد بقیه مرتب بشه و جای اونی که پاک شده رو پر کنه و شماره ردیف هام همیشه و در هر صورت پشت سر هم باشه
ببخشید بچه ها ولی ناراحت نشین
اگه ممکنه ومی تونین جواب سوالم رو بدین چون موندم توش.چاره ای جز این کار هم ندارم

slashslash2009
یک شنبه 04 بهمن 1388, 12:52 عصر
خوب من که براتون توضیح دادم چیکار کنید همون کارو انجام بده
واسه بدست آوردن تعداد سطرها : datatable.rows.count استفاده کن

ali.ghodrati
یک شنبه 04 بهمن 1388, 13:06 عصر
تعداد سطر هارو میونم چه جوری به دست بیارم.سوال منو مجددا بخونین توی صفحه اول تا خوب متوجه بشید

FastCode
یک شنبه 04 بهمن 1388, 13:08 عصر
IDENTITY_INSERT on
update
IDENTITY_INSERT off
همونطور که دوستان گفتند update کردن Key , UniqueKey, ... هیچوقت کار خوبی نیست(و بیشترین مشکلات نیز در شبکه ایجاد میشوند.)

slashslash2009
یک شنبه 04 بهمن 1388, 13:15 عصر
حالا میخوای روشی رو که بهت گفتمو انجام بدی یا نه تا یه کدی بزارم

ali.ghodrati
یک شنبه 04 بهمن 1388, 13:15 عصر
IDENTITY_INSERT off
update
IDENTITY_INSERT on
اینارو کجا وارد کنم؟

CYCLOPS
یک شنبه 04 بهمن 1388, 13:33 عصر
دوست عزیز اگر از راهی که تو این (http://barnamenevis.org/forum/showpost.php?p=895099&postcount=9)پست گفتم استفاده کنی همیشه اعدادت مرتب شده هستند متاسفانه مشکل اینه اصلا به پاسخ ها توجه نداری
اون لینک رو ببین کارت به بهترین نحو حل میشه اگر نشد کدت رو بذار و اونجوری مشکلت رو بپرس

موفق باشی

slashslash2009
یک شنبه 04 بهمن 1388, 13:59 عصر
بهتر بود واسه این سوالتون یک موضوع جدید میساختین
اگر از کریستال ریپورت استفاده میکنی که میتونی تبدیلش کنی به pdf یعنی ذخیره بشه به صورت pdf

ali.ghodrati
یک شنبه 04 بهمن 1388, 14:14 عصر
ببخشید
منظورم در خود برنامه است.یعنی در فرمی که کاربر می خواد اطلاعات رو وارد کنه من ظاهر سند رو براش بزارم .که هیچ محدودیت ثبتی نداشته باشه

daivid_ d31r1
جمعه 27 فروردین 1389, 20:31 عصر
سلام دوستان
اگه منظورتونو درست فهمیده باشم!
سطر آخر رو با این سطر تعویض(در واقع اطلاعات اونو تو اون سطری که میخای حذف کنی بریز) کن و سطر آخر رو حذف کن به همین سادگی!
یعنی همه ستونها بجز ستون ردیف رو با هم تعویض کن


for (int i = 0; i < dgv.Columns.Count; i++)
{
if (i == 0) continue;
//exchang to end row!!
dgv.Rows[currenrow].Cells[i].Value =
dgv.Rows[dgv.Rows.Count - 1].Cells[i].Value.ToString();
}
delete end row of dgv

موفق باشید
_____________________________
کارم بدان رسید که همراز خود کنم.................. هرروز برق لامع و هر بامداد باد

s.khoshfekran
شنبه 28 فروردین 1389, 00:52 صبح
این sample احتمالا به دردتو میخوره!!