Καλημέρα.
Τις τελευταίες μέρες δουλεύω με ένα DataGridView. Πριν αναφέρω το πρόβλημα που αντιμετωπίζω παραθέτω τον κώδικα (τα σχετικά κομμάτια) που χρησιμοποιώ.
Στο Load της φόρμας κάνω bind το DataGridView με ένα instance ενός TableAdapter από ένα DataSet που έχω προσθέσει στο solution και προσθέτω στο αντικείμενο μια Button Column. Πάνω στη φόρμα έχω βάλει και ένα BindingSource αντικείμενο με όνομα
myBind. Επίσης το όνομα του DataGridView είναι
myGrid.
Private Sub mainForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'POPULATING RECORDS FROM DATASET TO A DATAGRIDVIEW
'=================================================
'creating instances of myDataSet class objects
Dim myCompanies As New myDataSetTableAdapters.EtairiaTableAdapter()
'bind BindingSource object with data
myBind01.DataSource = myCompanies.GetEtairies()
'bind DataGridView object
myGrid.DataSource = myBind01
'ADD A BUTTON COLUMN TO THE DATAGRID VIEW
'========================================
'declare variables
Dim actionsColumn As New DataGridViewButtonColumn()
'set buttons properties
actionsColumn.HeaderText = "Customers"
actionsColumn.Name = "myButton"
actionsColumn.Text = "view"
actionsColumn.UseColumnTextForButtonValue = True
actionsColumn.DefaultCellStyle.BackColor = System.Drawing.Color.Silver
'add column
myGrid.Columns.Add(actionsColumn)
myGrid.Refresh()
'SET NAVIGATOR'S BINDING SOURCE
'==============================
myNavigator.BindingSource = myBind01
End SubΠάνω στη φόρμα έχω και ένα κουμπάκι Refresh για να ανανεώνω το DataGridView σε περίπτωση που του περάσω διάφορα φίλτρα μελλοντικά κτλ. Ο κώδικας πίσω από το button είναι.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'refresh grid
Dim myCompanies As New myDataSetTableAdapters.EtairiaTableAdapter()
myBind01.DataSource = myCompanies.GetEtairies()
myNavigator.BindingSource = myBind01
End SubΓια τεστάρισμα, όταν πατάω κάποιο κουμπί από την νέα button column του DataGridView μου επιστρέφονται σε ένα MsgBox οι συντεταγμένες του κελιού, ούτως ώστε να μπορώ να τις χρησιμοποιήσω μελλοντικά για να πέρνω κάποιες τιμές από τα κελιά.
Private Sub myGrid_CellEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles myGrid.CellEnter
'HANDLES THE BUTTON COLUMN CLICK EVENT
'=====================================
'find the row index of the selected cell
Dim sel_row_index As Integer = myGrid.CurrentCellAddress.Y
'find the column index of the selected cell
Dim sel_col_index As Integer = myGrid.CurrentCellAddress.X
If myGrid.Columns(e.ColumnIndex).Name = "myButton" Then
MsgBox(sel_row_index & " - " & sel_col_index)
End If
End SubΤο πρόβλημα τώρα πιο είναι. Όταν κάνει load η φόρμα και πατήσω το "view" κουμπί στο MsgBox μου επιστρέφονται κανονικά οι συντεταγμένες του κελιού. Όταν πατίσω το Refresh κουμπί και ξανακάνω την ίδια διαδικασία μου επιστρέφεται κανονικά η συντεταγμένη
Y του κελιού (δηλαδή το row) αλλά το
X (δηλαδή το column) μου δίνει την τιμή
0.
Από αυτό συμπεραίνω ότι μάλλον κάτι δεν πάει καλά με το Refresh. Το παλέυω 4 μέρες τώρα αλλά δεν κατάφερα να βρω μια άκρη.

Έχετε καμμιά ιδέα;