PDA

View Full Version : سوال: مشکل در نوشتم یه event برای چک باکسی که در دیتاگرید قرار گرفته ...



kablayi
شنبه 10 اسفند 1387, 16:26 عصر
سلام ...
من یه دیتاگرید روی فرم دارم که یه ستون اون چک باکس هست که قرار با تیک خوردن یا برداشتن تیک اون چک باکس یه عملی اتفاق بیفته حالا نمیدونم چطوری این کارو بکنم چون دیتاگرید ویو این چنین ایونتی نداره ...
اگر از mouseclick و یا ایونت های دیگه استفاده کنم ممکنه مقدار چک باکس عوض نشه چون با کلیک بر روی هر قسمت دیتاگرید اون عملیات انجام میشه ...

ممنون ...

anooshiran
شنبه 10 اسفند 1387, 17:27 عصر
سلام دوست عزيز

به نظر من بهترين روش استفاده از Event CellValidated است . مانند كد زير




Private Sub DataGridView1_CellValidated(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) _
Handles DataGridView1.CellValidated
If sender.CurrentCell.OwningColumn.CellType.Name.ToSt ring = "DataGridViewCheckBoxCell" Then
Dim _Value As Boolean = sender.CurrentCell.Value
If _Value Then
MsgBox("Cell is Checked")
Else
MsgBox("Cell is UnChecked")
End If
End If
End Sub

anooshiran
شنبه 10 اسفند 1387, 18:15 عصر
سلام دوست عزيز

راه ديگري هم هست. كه اگر پيشنهاد فوق جواب كارتان را نداد مي توانيد از آن استفاده كنيد.
و آن تعريف يك كلاس جديد و سفارشي كردن گريد است. بدين صورت كه در بخشي از آن ازInherit ChechBox استفاده كرده و از خاصيت هاي آن استفاده مي كنيد. اگر در اين مورد مشكلي بود عرض بفرماييد .

kablayi
شنبه 10 اسفند 1387, 18:15 عصر
سلام...
ممنون ...
ولی اینجوری کار نمیکنه ...

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


Private Sub DGVLISTinNEWSESS_CellClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DGVLISTinNEWSESS.CellClick
If DGVLISTinNEWSESS.CurrentCell.ColumnIndex = 0 Then
If DGVLISTinNEWSESS.CurrentRow.Cells("check").Value = 1 Then
DGVLISTinNEWSESS.CurrentRow.Cells("check").Value = 0
Else
DGVLISTinNEWSESS.CurrentRow.Cells("check").Value = 1
End If
End If
End Sub


تا اینجا با کلیک روی هر سلول از جدول که چک باکس داره مقدار چک باکس عوض میشه ...

ولی وقتی از رویداد cellValueChanged به صورت زیر استفاده میکنم ارور میده ...


Private Sub DGVLISTinNEWSESS_CellValueChanged(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DGVLISTinNEWSESS.CellValueChanged
If DGVLISTinNEWSESS.CurrentRow.Cells("check").Value = 1 Then
MessageBox.Show("is checked")
Else
MessageBox.Show("is unchecked")
End If
End Sub

قصدم اینه که وقتی مقدار value سلول عوض شد این رویداد رخ بده ولی ارور میده ...

نمیدونم چرا؟
اگه میشه کمک کنید ...

mostafaaa
شنبه 10 اسفند 1387, 19:42 عصر
سلام دوست من
شاید بهتر باشه شرط رو به این شکل استفاده کنی :

If e.ColumnIndex = 0 And Not e.RowIndex < 0 Then
MsgBox(Me.DataGridView1.Rows(e.RowIndex).Cells(e.C olumnIndex).Value)
End If

kablayi
شنبه 10 اسفند 1387, 21:56 عصر
آقا مرسی مشکل حل شد ...
ولی یه سوال مگه کدی که من نوشتم جه فرقی با این میکنه ...؟