PDA

View Full Version : مبتدی: مشکل در صدا نزدن تابع



piter11
دوشنبه 20 بهمن 1393, 17:33 عصر
سلام من تابع زیرو در رویداد CellEnter گرید ویو نوشتم حالا میخوام محدودیت دسترسی بزارم در همون فرم جاری برای قسمت های مختلف ولی نمی دونم چرا از دستور () CALL DGV1_cellenter
استفاده میکنم ارور میده حتی نوع تابعشم public گذاشتم فایده نداشت ممنون میشم راهنمایی کنید
dgv1 هم اسم گرید ویو
تابع در رویداد مربوطه
Private Sub Dgv1_CellEnter(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles Dgv1.CellEnter
Try


Label1.Text = Dgv1.CurrentRow.Cells(0).Value.ToString
txttell.Text = Dgv1.CurrentRow.Cells(3).Value.ToString
txtname.Text = Dgv1.CurrentRow.Cells(1).Value.ToString
HM_FarsiCalendar1.Text = Dgv1.CurrentRow.Cells(6).Value.ToString
txtprice.Text = Dgv1.CurrentRow.Cells(8).Value.ToString
txttime.Text = Dgv1.CurrentRow.Cells(5).Value.ToString
txttozihat.Text = Dgv1.CurrentRow.Cells(7).Value.ToString

Catch ex As Exception
MessageBox.Show("روی سربرگ کلیک نکن")
End Try
End Sub

piter11
سه شنبه 21 بهمن 1393, 11:26 صبح
یه مهندسی کمک کنه:متفکر:

محمد آشتیانی
سه شنبه 21 بهمن 1393, 14:16 عصر
سلام
دستوراتت رو به اینصورت بنویس


Private Sub FillForm()
Try
Label1.Text = Dgv1.CurrentRow.Cells(0).Value.ToString
txttell.Text = Dgv1.CurrentRow.Cells(3).Value.ToString
txtname.Text = Dgv1.CurrentRow.Cells(1).Value.ToString
HM_FarsiCalendar1.Text = Dgv1.CurrentRow.Cells(6).Value.ToString
txtprice.Text = Dgv1.CurrentRow.Cells(8).Value.ToString
txttime.Text = Dgv1.CurrentRow.Cells(5).Value.ToString
txttozihat.Text = Dgv1.CurrentRow.Cells(7).Value.ToString
Catch ex As Exception
MessageBox.Show("روی سربرگ کلیک نکن")
End Try
End Sub


و هرجا خواستی فراخوانی کن (تو رویداد CellEnter دیتا گرید هم همینطور)

برای مثال

Private Sub Dgv1_CellEnter(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles Dgv1.CellEnter
FillForm()
End Sub



موفق باشید

piter11
سه شنبه 21 بهمن 1393, 16:26 عصر
ببنین دوست عزیز من این کارم انجام دادم بازم فرقی نمیکنه چه کلشو بنیوسی چه تو تابع بنویسی پاس بدی جاهای دیگه من تو رویداد click گریدویو این کدو وقتی مینویسیم, رو سطر ها کلیک میکنم اطلاعاتش بایند میشه به تکس باکسها حالا این کدو مینویسم داخل دکمه سرچ دوتا سطر میاره اطلاعات سطر اولو بایند کرده دومی کلیک میکنم اتفاقی نمیافته چون تو رویداد Click گرید ویو باید بنویسیش تا بشه نمیدونم منظورمه متوجه میشید یا نه

A_1397
سه شنبه 21 بهمن 1393, 16:48 عصر
این رو امتحان کن :
Dgv1.CurrentRow.Cells.Item(0).Value.ToString

محمد آشتیانی
سه شنبه 21 بهمن 1393, 22:08 عصر
سلام
دوست عزیز شما اون متد رو تو رویداد SelectionChanged مربوط به دیتاگرید فراخوانی کنید
ترجیحا مقدار پراپرتی SelectionMode رو FullRowSelect انتخاب کن.



موفق باشید

piter11
چهارشنبه 22 بهمن 1393, 10:39 صبح
بازم فرقی نمیکنه ببینید به عکس زیر توجه کنید من اون تابع رو در آخر کد ویرایش یعنی بعد از مسیج اعمال تغییرات با موفقیت انجام شد فراخوانی میکنم ,خوب برای رکورد اول مشکلی پیش نمیاد ولی برای سطر دوم وقتی ویرایش میکنی تغییرات اعمال میشه, تو گرید بالا هم نشونش میده ولی بر میگرده به سطر اول و محتویات سطر اولو بایند میکنه و نشون میده من میخوام بعد از تغییرات هر سطری رو خود اون سطر کلیک شه نیاد اول سطر و اولین سطرو بایند کنه, اینجوری واسه هر تغییره دوباره ای باید کاربر بیاد اون سطرو دوباره پیداش کنه روش کلیک کنه
الان اینجا رکورد آیدی 71 تغییر میدم بر میگرده به سطر اول آیدی69 محتویات اونو سلکت میکنه و نشون میده
128364

محمد آشتیانی
جمعه 24 بهمن 1393, 01:09 صبح
سلام
به شکل زیر عمل کن ، انشااله که حل میشه

این کد ها رو قبل و بعد از کد ویرایش و لود کردن دوباره اطلاعات توی دیتا گرید بنویس (من تو قالب یه متد نوشتم ، شما هرجا که کدت رو نوشتی اینا رو اضافه کن)

Private Sub EditData()
Dim SaveRow As Integer = 0
Dim Current As Integer = 0
If Dgv1.Rows.Count > 0 Then
SaveRow = Dgv1.FirstDisplayedCell.RowIndex
Current = Dgv1.CurrentRow.Index
End If
'
'
' عملیات ویرایش و نمایش پیام موفقیت
'
' لود مجدد اطلاعات در دیتاگرید
'
'
If (SaveRow < Dgv1.Rows.Count) Then
Dgv1.FirstDisplayedScrollingRowIndex = SaveRow
Dgv1.CurrentCell = Dgv1.Item(0, Current)
Dgv1.Rows(Current).Selected = True
End If
End Sub



این متد رو هم که قبلا داشتی ، با تغییراتی البته (حتما بجای بلوک Try.. Catch این IF که نوشتمو بنویس)

Private Sub FillForm()
If Not (Dgv1.CurrentRow Is Nothing) Then
Label1.Text = Dgv1.CurrentRow.Cells(0).Value.ToString
txttell.Text = Dgv1.CurrentRow.Cells(3).Value.ToString
txtname.Text = Dgv1.CurrentRow.Cells(1).Value.ToString
HM_FarsiCalendar1.Text = Dgv1.CurrentRow.Cells(6).Value.ToString
txtprice.Text = Dgv1.CurrentRow.Cells(8).Value.ToString
txttime.Text = Dgv1.CurrentRow.Cells(5).Value.ToString
txttozihat.Text = Dgv1.CurrentRow.Cells(7).Value.ToString
End If
End Sub



حالا تو رویداد CurrentCellChanged دیتاگرید ، متد FillForm رو فراخوانی کن و تمام.

Private Sub Dgv1_CurrentCellChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Dgv1.CurrentCellChanged
FillForm()
End Sub




موفق باشید.

piter11
جمعه 24 بهمن 1393, 14:34 عصر
مهندس خیلی افتادی زحمت کار کرد واقعا ممنون انشالا دانشت روز به روز بیشتر شه