PDA

View Full Version : ست کردن DataGrid.CurrentCell



h_sadeghynejad
شنبه 05 خرداد 1386, 23:45 عصر
راستش و توی ست کردن این گزینه به یه مشکل برخوردم که اصلا نمیدونم چیکار باید بکنم هر جا هم گشتم نفهمیدم . من میخوام که چند تا دکمه برای جابه جایی سلکت دیتاگرید داشته باشم که مثلا رکورد بعدی, رکورد قبلی و ... اما وقتی برای سلکت کردن وقتی توی فرم لود این گزینه اجرا میشه این پیغام رو میده
8665

محسن بابائی
یک شنبه 06 خرداد 1386, 10:27 صبح
دستوری که نوشتی کاملا صحیح است . البته اگر از 2005 استفاده می کنی . چون 2003 را نمی دونم .
باید دید که کجا از این دستور استفاده کردی (توی کدوم رویداد) و یا موارد دیگه .

h_sadeghynejad
یک شنبه 06 خرداد 1386, 16:08 عصر
من این کد رو توی 2005 استفاده کردم ضمنا من یه پراپرتی Let , Get نوشتم که وقتی مقدار یه متغیر تغییر داده شده اجرا بشه و به صورت اتوماتیک گزینه سلکت دیتاگرید رو تغییر بده و روش کار اینطور هستش که ابتدا که DataSource دیتاگرید رو ست میکنم (توی دیتابیس 3 رکورد هستش) وقتی اولین گزینه مقدار دهی میشه رویداد Enter دیتاگرید اجرامیشه (که داخل اون یه سری کد هستش که داده رو از دیتا گرید میریزه توی textBox های مربوطه به همراه یه سری دیگه از اطلاعات) بعد از این وقتی این دستور اجرا میشه این پیغام خطا رو نشون میده

h_sadeghynejad
یک شنبه 06 خرداد 1386, 20:31 عصر
هیچکی نیست جوابمو بده خیلی فوریه

h_sadeghynejad
یک شنبه 06 خرداد 1386, 22:31 عصر
ضمنا این هم Exception Details



System.InvalidOperationException was unhandled
Message="Operation is not valid because it results in a reentrant call to the SetCurrentCellAddressCore function."
Source="System.Windows.Forms"
StackTrace:
at System.Windows.Forms.DataGridView.SetCurrentCellAd dressCore(Int32 columnIndex, Int32 rowIndex, Boolean setAnchorCellAddress, Boolean validateCurrentCell, Boolean throughMouseClick)
at System.Windows.Forms.DataGridView.set_CurrentCell( DataGridViewCell value)
at Library.Frm_NewBook.set_Int_CurRow(Object value) in G:\Programming\VisualStudio.net_2005\Library\Libra ry\Forms\Frm_NewBook.vb:line 402
at Library.Frm_NewBook.Dg_Data_CellEnter(Object sender, DataGridViewCellEventArgs e) in G:\Programming\VisualStudio.net_2005\Library\Libra ry\Forms\Frm_NewBook.vb:line 288
at System.Windows.Forms.DataGridView.OnCellEnter(Data GridViewCellEventArgs e)
at System.Windows.Forms.DataGridView.OnCellEnter(Data GridViewCell& dataGridViewCell, Int32 columnIndex, Int32 rowIndex)
at System.Windows.Forms.DataGridView.SetCurrentCellAd dressCore(Int32 columnIndex, Int32 rowIndex, Boolean setAnchorCellAddress, Boolean validateCurrentCell, Boolean throughMouseClick)
at System.Windows.Forms.DataGridView.OnCellMouseDown( HitTestInfo hti, Boolean isShiftDown, Boolean isControlDown)
at System.Windows.Forms.DataGridView.OnCellMouseDown( DataGridViewCellMouseEventArgs e)
at System.Windows.Forms.DataGridView.OnMouseDown(Mous eEventArgs e)
at System.Windows.Forms.Control.WmMouseDown(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.DataGridView.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.O nMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.W ndProc(Message& m)
at System.Windows.Forms.NativeWindow.DebuggableCallba ck(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
at System.Windows.Forms.UnsafeNativeMethods.DispatchM essageW(MSG& msg)
at System.Windows.Forms.Application.ComponentManager. System.Windows.Forms.UnsafeNativeMethods.IMsoCompo nentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
at System.Windows.Forms.Application.ThreadContext.Run MessageLoopInner(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.ThreadContext.Run MessageLoop(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.Run(ApplicationCo ntext context)
at Microsoft.VisualBasic.ApplicationServices.WindowsF ormsApplicationBase.OnRun()
at Microsoft.VisualBasic.ApplicationServices.WindowsF ormsApplicationBase.DoApplicationModel()
at Microsoft.VisualBasic.ApplicationServices.WindowsF ormsApplicationBase.Run(String[] commandLine)
at Library.My.MyApplication.Main(String[] Args) in 17d14f5c-a337-4978-8281-53493378c1071.vb:line 81
at System.AppDomain.nExecuteAssembly(Assembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.Run UsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context( Object state)
at System.Threading.ExecutionContext.Run(ExecutionCon text executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()

h_sadeghynejad
دوشنبه 07 خرداد 1386, 00:17 صبح
آخرش بعد از کلی دردسر فهمیدم که عیب کارم از کجاست من اومدم در اصل تابع ست کردن مکان سطر خودم رو توی CellEnter نوشتم (این رویداد وقتی رخ میده که با یک روشی اعم از کلیک موس, کلید های جهت دار کیبرد یا به روش کد نویسی یا ... کرسر وارد سلول بشه و اون سلول رو انتخاب کنه) حالا من میخواستم که وقتی وارد این سلول شد مکان انتخاب سلول رو تغییر بده که این پیغام :


Operation is not valid because it results in a reentrant call to the SetCurrentCellAddressCore function

رو به من نشون میداد
حالا به نظر شما این یه عیب محسوب میشه یا یه مزیت که مایکروسافت این حالت رو برای این کامپوننت در نظر گرفته

h_sadeghynejad
دوشنبه 07 خرداد 1386, 00:20 صبح
به نظر خودم که این یک عیب محسوب میشه چون همونطور که در TextBox با رویداد TextChange در صورتی که مقدار تغییر کرد دوباره خودمون نگذاریم که تغییر کنه و دوباره اون رو تغییر دهیم این رویداد هم باید این امکان رو بده که وقتی کاربر یه سلول رو انتخاب کرد انتخاب رو تغییر بده و نزاره که کاربر این سلول رو انتخاب کنه
موفق باشید

Microsoft.net
دوشنبه 07 خرداد 1386, 15:18 عصر
اگه مکان سلول رو میخوای عوض کنی یه راه ساده تر هست
Datagridview1.currentcell = datagridview1(Rowindex,ColumnIndex
یه پرانتز هم آخرش بنداز

h_sadeghynejad
دوشنبه 07 خرداد 1386, 18:29 عصر
اگه مکان سلول رو میخوای عوض کنی یه راه ساده تر هست
Datagridview1.currentcell = datagridview1(Rowindex,ColumnIndex
یه پرانتز هم آخرش بنداز

در واقع من هم از همین کد استفاده کردم اما این کد رو توی رویداد CellEnter قرار دادم که این پیغام رو بهم نشون داد