نقل قول: رديف در گريد ويو
سلام
شايد ايني كه مخواهم بگم جواب شما نباشه ولي اين روش شما درست نيست يا مناسب نيست بهتره يه روش ديگه پيدا كني
نقل قول: رديف در گريد ويو
فکر میکنم الان شما دارین از شماره ردیف به عنوان شرط دستورات اسکیوالتون استفاده میکنید و برای همین الان به مشکل برخوردید.درسته؟
آیا شما قصد دارین که تو گریدتون حتما ردیف دیده بشه؟
نقل قول: رديف در گريد ويو
سلام.مطمئن نیستم اما اگه یه Trigger توی SQL بنویسید فکر کنم بهترین راه باشه.خوب بعدشم که دیتا گرید Refresh میشه دیگه.که مثلا اینجوری باشه که بعد از حذف،از شماره بعدی تا آخرین رکورد یک شماره کم کن.
:لبخند:اما خیلی غیرمنطقیه.100% یه راه ساده داره.
نقل قول: رديف در گريد ويو
شما به هیچ وجه نباید مقادیر فیلدهای اصلی رو تغییر بدید جهت نمایش ردیف در DataGridView میتونید از Bound خود دیتا گرید استفاده کنید
شما میتونید از رویداد RowPostPaint استفاده کنید
PrivateSub DGV_RowPostPaint(ByVal sender AsObject, 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)
EndUsing
EndSub
http://f.imagehost.org/0301/Row.jpg
نقل قول: رديف در گريد ويو
سلام
حالا اگر بخایم یه فیلد رو با این روش دوباره مرتب کنیم چی؟اگر فیلد اصلی هم نباشه.
نقل قول: رديف در گريد ويو
تو این روش اصلا احتیاجی به کلید اصلی نداری.
اگه به سورس توجه کرده باشی شماره هر ردیف از Index خود دیتاگرید به دست میاد یعنی از 1 میشماره تا آخر حالا میخواد کلید اصلی هرچی باشی.
اگر هم دیتا گرید بر اساس فیلد دیگه ای مرتب بشه هیچ فرقی نمیکنه بازم ردیف همونه چون همونطور که گفتم معیار شمارش سطر از اول تا آخره دیگه جابجایی فیللدها هیچ تاثیری نداره
نقل قول: رديف در گريد ويو
دوستان من رديف رو كليد نگرفتما. رمز عبور رو كليد گرفتم و عملياتم (آپديت و ديليت و ..) رو مي خواستم اگه بشه به دلخواه كاربر با رديف يا رمز انجام بدم
نقل قول: رديف در گريد ويو
نقل قول:
نوشته شده توسط
DoDoklak
تو این روش اصلا احتیاجی به کلید اصلی نداری.
اگه به سورس توجه کرده باشی شماره هر ردیف از Index خود دیتاگرید به دست میاد یعنی از 1 میشماره تا آخر حالا میخواد کلید اصلی هرچی باشی.
اگر هم دیتا گرید بر اساس فیلد دیگه ای مرتب بشه هیچ فرقی نمیکنه بازم ردیف همونه چون همونطور که گفتم معیار شمارش سطر از اول تا آخره دیگه جابجایی فیللدها هیچ تاثیری نداره
سلام
شما درست میفرمایید.اما من دنبال فیلدی هستم که همیشه مرتب باشه. با هر Delete که انجام میشه Refresh بشه و شماره هارو دوباره مرتب کنه.چیزی شبیه به Aoutosort که خودش مقادیر رو هم تصحیح کنه.با این فرض که مقادیر فیلدی از جدول ما باشند،نه در Interface برنامه
نقل قول: رديف در گريد ويو
با تشكر خيلي خيلي صميمانه از كمكتون :لبخندساده:
در واقع الان با كمك راهنمايي DoDoklak عزيز كاملا مشكلم حل شد . فقط مي مونه چند سوال :خجالت::
-1- آيا با اين رديف ها مي شه به ركورد دسترسي پيدا كرد و مثلا رمز رديف اول رو ويرايش كرد ؟
-2- مي شه در مورد استفاده از Bound كه گفتيد كمي توضيح بديد ؟
-3- به نظر شما رمز رو از كليد بودن در بيارم بهتره ؟
-4- توي تصويري كه شما گذاشتيد ف ها دقيقا زير فيلد مربوطه قرار گرفتند.براي اين كار خاصي لازمه؟ امكان داره در صورت scroll دار شدن dgview در جاي نا مناسبي قرار بگيره ؟
نقل قول: رديف در گريد ويو
نقل قول:
-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
نقل قول: رديف در گريد ويو
نقل قول: ردیف در گرید ویو
DoDoklak عزیز شرمنده باز سوالی برام پیش آمده می شه یه نگاه به این تصاویر بندازید و بگید کدوم یکی درسته با توجه به راه حلی که نشونم دادید ؟هر کاری می کنم نمیشه عکس بذارم :-( چرا ؟؟میشه براتون میل کنم ؟ به کدوم آدرس ؟
نقل قول: ردیف در گرید ویو
من با e.rowindex+1 نتونستم مثلا عمل حذف از پایگاه داده رو انجام بدم.
لطفا بیشتر راهنماییم کنید.
ضمنا این همون تصاویری هست که گفتم.لطفا ببینید کدوم یکی درسته؟
این پایگاه داده ی یک کافینت مانندی هست.اینجا اگه ردیف کلید نباشه پس رابطه ها چطوری برقرار شه؟
http://www.4shared.com/file/204756906/1860d22b/db2.html
http://www.4shared.com/file/204756509/81c536de/db_online.html
نقل قول: رديف در گريد ويو
نقل قول:
؟هر کاری می کنم نمیشه عکس بذارم
برای نمایش تصویر تو فریوم باید عکسهاتون رو تو یک سایت که لینک مستقیم میده بزارید مثلا
www.ImageHost.Org
بعد از اینکه عکس رو بهش دادی یک لینک بهت میده که اگر اینجا بزاری مستقیما عکس نمایش داده میشه
نقل قول:
من با e.rowindex+1 نتونستم مثلا عمل حذف از پایگاه داده رو انجام بدم.
لطفا بیشتر راهنماییم کنید.
با توجه به جداولی که گذاشتید شما اصلا احتیاج به فیلد ردیف ندارید همون کد مشتری کلید اصلی شما است و از طریق اون ارتباط بین جدولها برقراره.
حالا مشکل شما اینه که اون کد مشتری رو چطور بدست بیارید!
فرض کنید دیتا گیرید شما باید فیلد نام رو نمایش بده .در این صورت شما همراه فیلد نام فیلد کد مشتری رو هم میارید ولی کد مشتری رو مخفی میکنید تا کاربر اونو نبینه و وقتی کاربر ردیفی رو انتخاب میکنه شما از طریق e.rowindex+1 به ردیف مورد نظر دسترسی دارید و میتونید مقدار کد مشتری رو کهVisible رو False کردید بدست بیارید و عملیات لازم رو انجام بدید
نقل قول: ردیف در گرید ویو
میشه یه مثال بذارید؟البته اگر زحمتی نباشه .شرمنده
1 ضمیمه
نقل قول: ردیف در گرید ویو