PDA

View Full Version : رديف در گريد ويو



elnazii
جمعه 11 دی 1388, 00:34 صبح
سلام دوستان
من يه تازه كارم با صد هزار تا سوال:اشتباه:
من يه جدول user توي اس كيو ال ايجاد كردم با دو فيلد : نوع كاربري و رمز و رديف
كه رديف نامريك هست و identity=yes .خوب حالا وقتي ركوردي حذف مي شه شماره هارديف به هم مي خورن. من مي خوام توي گريد ويو رديف رو داشته باشم كه مدير بتونه رديف رو وارد كرده و ويرايشش كنه.

ebrahimv
جمعه 11 دی 1388, 18:31 عصر
سلام
شايد ايني كه مخواهم بگم جواب شما نباشه ولي اين روش شما درست نيست يا مناسب نيست بهتره يه روش ديگه پيدا كني

baran_mehr
جمعه 11 دی 1388, 18:57 عصر
فکر میکنم الان شما دارین از شماره ردیف به عنوان شرط دستورات اسکیوالتون استفاده میکنید و برای همین الان به مشکل برخوردید.درسته؟
آیا شما قصد دارین که تو گریدتون حتما ردیف دیده بشه؟

gigidagostino
جمعه 11 دی 1388, 21:44 عصر
سلام.مطمئن نیستم اما اگه یه Trigger توی SQL بنویسید فکر کنم بهترین راه باشه.خوب بعدشم که دیتا گرید Refresh میشه دیگه.که مثلا اینجوری باشه که بعد از حذف،از شماره بعدی تا آخرین رکورد یک شماره کم کن.
:لبخند:اما خیلی غیرمنطقیه.100% یه راه ساده داره.

DoDoklak
شنبه 12 دی 1388, 09:22 صبح
شما به هیچ وجه نباید مقادیر فیلدهای اصلی رو تغییر بدید جهت نمایش ردیف در DataGridView میتونید از Bound خود دیتا گرید استفاده کنید
شما میتونید از رویداد 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


http://f.imagehost.org/0301/Row.jpg

gigidagostino
شنبه 12 دی 1388, 09:50 صبح
سلام
حالا اگر بخایم یه فیلد رو با این روش دوباره مرتب کنیم چی؟اگر فیلد اصلی هم نباشه.

DoDoklak
شنبه 12 دی 1388, 10:59 صبح
تو این روش اصلا احتیاجی به کلید اصلی نداری.
اگه به سورس توجه کرده باشی شماره هر ردیف از Index خود دیتاگرید به دست میاد یعنی از 1 میشماره تا آخر حالا میخواد کلید اصلی هرچی باشی.
اگر هم دیتا گرید بر اساس فیلد دیگه ای مرتب بشه هیچ فرقی نمیکنه بازم ردیف همونه چون همونطور که گفتم معیار شمارش سطر از اول تا آخره دیگه جابجایی فیللدها هیچ تاثیری نداره

elnazii
شنبه 12 دی 1388, 16:03 عصر
دوستان من رديف رو كليد نگرفتما. رمز عبور رو كليد گرفتم و عملياتم (آپديت و ديليت و ..) رو مي خواستم اگه بشه به دلخواه كاربر با رديف يا رمز انجام بدم

gigidagostino
شنبه 12 دی 1388, 16:25 عصر
تو این روش اصلا احتیاجی به کلید اصلی نداری.
اگه به سورس توجه کرده باشی شماره هر ردیف از Index خود دیتاگرید به دست میاد یعنی از 1 میشماره تا آخر حالا میخواد کلید اصلی هرچی باشی.
اگر هم دیتا گرید بر اساس فیلد دیگه ای مرتب بشه هیچ فرقی نمیکنه بازم ردیف همونه چون همونطور که گفتم معیار شمارش سطر از اول تا آخره دیگه جابجایی فیللدها هیچ تاثیری نداره
سلام
شما درست میفرمایید.اما من دنبال فیلدی هستم که همیشه مرتب باشه. با هر Delete که انجام میشه Refresh بشه و شماره هارو دوباره مرتب کنه.چیزی شبیه به Aoutosort که خودش مقادیر رو هم تصحیح کنه.با این فرض که مقادیر فیلدی از جدول ما باشند،نه در Interface برنامه

elnazii
شنبه 12 دی 1388, 16:26 عصر
با تشكر خيلي خيلي صميمانه از كمكتون :لبخندساده:
در واقع الان با كمك راهنمايي DoDoklak عزيز كاملا مشكلم حل شد . فقط مي مونه چند سوال :خجالت::

-1- آيا با اين رديف ها مي شه به ركورد دسترسي پيدا كرد و مثلا رمز رديف اول رو ويرايش كرد ؟
-2- مي شه در مورد استفاده از Bound كه گفتيد كمي توضيح بديد ؟
-3- به نظر شما رمز رو از كليد بودن در بيارم بهتره ؟
-4- توي تصويري كه شما گذاشتيد ف ها دقيقا زير فيلد مربوطه قرار گرفتند.براي اين كار خاصي لازمه؟ امكان داره در صورت scroll دار شدن dgview در جاي نا مناسبي قرار بگيره ؟

DoDoklak
شنبه 12 دی 1388, 17:45 عصر
-1- آيا با اين رديف ها مي شه به ركورد دسترسي پيدا كرد و مثلا رمز رديف اول رو ويرايش كرد ؟



e.RowIndex + 1


مي شه در مورد استفاده از Bound كه گفتيد كمي توضيح بديد ؟

همون ناحیه قرمز که خط کشیدم اسمش Bound است که میتونید ازش استفاده کنی


-3- به نظر شما رمز رو از كليد بودن در بيارم بهتره ؟


بله .همیشه سعی کنید کلید بصورت AutoNumber باشه ارزش اینکار رو تو برنامه های تحت شبکه بیشتر درک میکنید


4- توي تصويري كه شما گذاشتيد ف ها دقيقا زير فيلد مربوطه قرار گرفتند.براي اين كار خاصي لازمه؟ امكان داره در صورت scroll دار شدن dgview در جاي نا مناسبي قرار بگيره ؟

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

DGV.Size.Width - 40
عبارت DGV.Size.Width متغییره و با تغییر اندازه دیتا گیرد اون هم عوض میشه و شمارها سر جای خودشون قرار میگیرن

البته یک نکته رو هم بگم نمونه کد بالا برای وقتیه که دیتا گرید در حالت RightToLeft=true باشه اگر RightToLeft=False باشه از این دستور استفاده کن

DGV.Size.Width+10

elnazii
دوشنبه 14 دی 1388, 00:13 صبح
خيلي ممنون:لبخندساده:

elnazii
پنج شنبه 01 بهمن 1388, 18:44 عصر
DoDoklak عزیز شرمنده باز سوالی برام پیش آمده می شه یه نگاه به این تصاویر بندازید و بگید کدوم یکی درسته با توجه به راه حلی که نشونم دادید ؟هر کاری می کنم نمیشه عکس بذارم :-( چرا ؟؟میشه براتون میل کنم ؟ به کدوم آدرس ؟

elnazii
شنبه 03 بهمن 1388, 08:45 صبح
من با e.rowindex+1 نتونستم مثلا عمل حذف از پایگاه داده رو انجام بدم.
لطفا بیشتر راهنماییم کنید.


ضمنا این همون تصاویری هست که گفتم.لطفا ببینید کدوم یکی درسته؟
این پایگاه داده ی یک کافینت مانندی هست.اینجا اگه ردیف کلید نباشه پس رابطه ها چطوری برقرار شه؟

http://www.4shared.com/file/204756906/1860d22b/db2.html

http://www.4shared.com/file/204756509/81c536de/db_online.html

DoDoklak
شنبه 03 بهمن 1388, 10:07 صبح
؟هر کاری می کنم نمیشه عکس بذارم
برای نمایش تصویر تو فریوم باید عکسهاتون رو تو یک سایت که لینک مستقیم میده بزارید مثلا
www.ImageHost.Org (http://www.ImageHost.Org)
بعد از اینکه عکس رو بهش دادی یک لینک بهت میده که اگر اینجا بزاری مستقیما عکس نمایش داده میشه


من با e.rowindex+1 نتونستم مثلا عمل حذف از پایگاه داده رو انجام بدم.
لطفا بیشتر راهنماییم کنید.

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

حالا مشکل شما اینه که اون کد مشتری رو چطور بدست بیارید!
فرض کنید دیتا گیرید شما باید فیلد نام رو نمایش بده .در این صورت شما همراه فیلد نام فیلد کد مشتری رو هم میارید ولی کد مشتری رو مخفی میکنید تا کاربر اونو نبینه و وقتی کاربر ردیفی رو انتخاب میکنه شما از طریق e.rowindex+1 به ردیف مورد نظر دسترسی دارید و میتونید مقدار کد مشتری رو کهVisible رو False کردید بدست بیارید و عملیات لازم رو انجام بدید

elnazii
یک شنبه 04 بهمن 1388, 15:36 عصر
میشه یه مثال بذارید؟البته اگر زحمتی نباشه .شرمنده

ACorvinus
یک شنبه 04 بهمن 1388, 17:38 عصر
سلام.

نمونه: 43139