RIAS
asked on
Datagridview selection changed event
Hi,
I have a code on DataGridView1_SelectionCha nged
Private Sub DataGridView1_SelectionCha nged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DataGridView1.SelectionCha nged
For Each r As DataGridViewRow In DataGridView1.SelectedRows
r.Cells(0).Value = True
Next
DataGridView1.EndEdit()
DataGridView1.Refresh()
The problem is that when I bind the grid with datatable its first row is selected by default which I deselect with clear selection on form load but even before that when it is just bound DataGridView1.SelectionCha nged
is called and keeps the forst row selected .Any way of stopping this event to be called everytime I have mouse down or is there any other alternative for selection changed event ?
Cheers
I have a code on DataGridView1_SelectionCha
Private Sub DataGridView1_SelectionCha
For Each r As DataGridViewRow In DataGridView1.SelectedRows
r.Cells(0).Value = True
Next
DataGridView1.EndEdit()
DataGridView1.Refresh()
The problem is that when I bind the grid with datatable its first row is selected by default which I deselect with clear selection on form load but even before that when it is just bound DataGridView1.SelectionCha
is called and keeps the forst row selected .Any way of stopping this event to be called everytime I have mouse down or is there any other alternative for selection changed event ?
Cheers
in form load event
For i as integer=0 to Me.DatagridView.Rows.Count -1
Me.DatagridView.Rows(i).Ce lls(0).Val ue=False
next
For i as integer=0 to Me.DatagridView.Rows.Count
Me.DatagridView.Rows(i).Ce
next
ASKER
Hi,
Tried that but no good ..
Tried that but no good ..
sorry the checkboxcolun is databound?
ASKER
No it is not ..Cheers
in which column do you have the checkboxcolumn (in which column Index)
ASKER
It is added in datatable.But not a result of any query from database.
i just confused....
after populating your datagridview please try to set this kind of code
For i as integer=0 to Me.DatagridView.Rows.Count -1
Me.DatagridView.Rows(i).Ce lls(0).Val ue=False
next
after populating your datagridview please try to set this kind of code
For i as integer=0 to Me.DatagridView.Rows.Count
Me.DatagridView.Rows(i).Ce
next
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Will this not hamper the performance ..looping the entire grid ?
Further, if you only want AutoCheck to be performed by mouse selection only, you can do the following:
Private Sub DataGridView1_MouseDown(By Val sender As Object, ByVal e As System.Windows.Forms.Mouse EventArgs) Handles DataGridView1.MouseDown
'Enable autocheck on mouse down
AllowAutoCheck = True
End Sub
Private Sub DataGridView1_MouseUp(ByVa l sender As Object, ByVal e As System.Windows.Forms.Mouse EventArgs) Handles DataGridView1.MouseUp
'Disable autocheck on mouse up
AllowAutoCheck = False
End Sub
Private Sub DataGridView1_MouseDown(By
'Enable autocheck on mouse down
AllowAutoCheck = True
End Sub
Private Sub DataGridView1_MouseUp(ByVa
'Disable autocheck on mouse up
AllowAutoCheck = False
End Sub
ASKER
Hi klakkas,
That worked.Any suggestions on how to preserve the selected rows after having a mouse down on the grid as as soon as I have mouse down it looks that all my priviously selected rows have disappeared...
That worked.Any suggestions on how to preserve the selected rows after having a mouse down on the grid as as soon as I have mouse down it looks that all my priviously selected rows have disappeared...
Clicking on any row of the datagrid will Deselect all rows and Select the clicked row.
To avoid this, you can do several things:
1. Keep SHIFT pressed while clicking
2. Keep CTRL pressed while clicking
3. Always remember in your code the selected rows and when the DataGridView1_SelectionCha nged event fires, programmatically add these rows to the selected.
To avoid this, you can do several things:
1. Keep SHIFT pressed while clicking
2. Keep CTRL pressed while clicking
3. Always remember in your code the selected rows and when the DataGridView1_SelectionCha
ASKER
Hi,
Sorry for not making myself clear.
What I want to do is I select couple of rows by mouse dragging.Til here it works fine I have the 2 rows selected with true in my first column.Now i want to select 2 more rows by mouse dragging here --what happens is that I lose my previously selected rows and only have the current ones.
I need to keep those previously selected rows as well
Sorry for not making myself clear.
What I want to do is I select couple of rows by mouse dragging.Til here it works fine I have the 2 rows selected with true in my first column.Now i want to select 2 more rows by mouse dragging here --what happens is that I lose my previously selected rows and only have the current ones.
I need to keep those previously selected rows as well
If during the second mouse dragging you keep the CTRL key pressed, the previous selection will not be lost.
Try it and let me know.
Try it and let me know.
ASKER
Is it possible without CTRL key as the second selection can be after some time as well and also this grid is on a tab control so the user might even chage tabs before he selects some new rows.
Cheers
Cheers
@Rias
"The problem is that when I bind the grid with datatable its first row is selected by default which I deselect with clear selection on form load but even before that when it is just bound DataGridView1.SelectionCha nged
is called and keeps the forst row selected"
I thing you talking about different Subjects :)
@Rias Said that he has a problem with the first CheckBox which is always selected...
Maybe i missunderstood but the problem is how to diselect this one ...am i right ? Correct me If so....
"The problem is that when I bind the grid with datatable its first row is selected by default which I deselect with clear selection on form load but even before that when it is just bound DataGridView1.SelectionCha
is called and keeps the forst row selected"
I thing you talking about different Subjects :)
@Rias Said that he has a problem with the first CheckBox which is always selected...
Maybe i missunderstood but the problem is how to diselect this one ...am i right ? Correct me If so....
In this case you should go the 3rd suggestion:
3. Always remember in your code the selected rows and when the DataGridView1_SelectionCha nged event fires, programmatically add these rows to the selected.
Dim SelectedIndices As New List(Of Integer)
Private Sub DataGridView1_SelectionCha nged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DataGridView1.SelectionCha nged
If AllowAutoCheck = True Then
For Each r As DataGridViewRow In DataGridView1.SelectedRows
r.Cells(0).Value = True
If SelectedIndices.Contains(r .Index) = False Then
SelectedIndices.Add(r.Inde x)
End If
Next
For Each ind As Integer In SelectedIndices
If DataGridView1.Rows(ind).Se lected = False Then
DataGridView1.Rows(ind).Se lected = True
End If
Next
DataGridView1.EndEdit()
DataGridView1.Refresh()
End If
End Sub
Note that this way, you will never be able to De-Select a row via mouse clicks. In order to De-Select, you will have to programmatically remove the rowIndex from the SelectedIndices List.
3. Always remember in your code the selected rows and when the DataGridView1_SelectionCha
Dim SelectedIndices As New List(Of Integer)
Private Sub DataGridView1_SelectionCha
If AllowAutoCheck = True Then
For Each r As DataGridViewRow In DataGridView1.SelectedRows
r.Cells(0).Value = True
If SelectedIndices.Contains(r
SelectedIndices.Add(r.Inde
End If
Next
For Each ind As Integer In SelectedIndices
If DataGridView1.Rows(ind).Se
DataGridView1.Rows(ind).Se
End If
Next
DataGridView1.EndEdit()
DataGridView1.Refresh()
End If
End Sub
Note that this way, you will never be able to De-Select a row via mouse clicks. In order to De-Select, you will have to programmatically remove the rowIndex from the SelectedIndices List.
ASKER
Yes jtoutou you are right. the problem is how to diselect this one.
Your help and interest is appreciated.Will be right back after lunch break in 1 hour .
Cheers mate
Your help and interest is appreciated.Will be right back after lunch break in 1 hour .
Cheers mate
@jtoutou
In order to understand better this thread, read RIA S previous one:
https://www.experts-exchange.com/questions/26480217/Multiple-select-on-datagridview.html
In order to understand better this thread, read RIA S previous one:
https://www.experts-exchange.com/questions/26480217/Multiple-select-on-datagridview.html
I've read it already ..the question is what about when '"multiselection" change ..does the checkboxes return to false after that???
ok here we are.....
new form as form1
and a datagridview
new form as form1
and a datagridview
Imports System.Text
Imports System.Windows.Forms
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim checkCol As New DataGridViewCheckBoxColumn
checkCol.Name = "Test"
Dim txtcol As New DataGridViewTextBoxColumn
Me.DataGridView1.Columns.Insert(0, txtcol)
Me.DataGridView1.Columns.Insert(1, checkCol)
Me.DataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect
For i As Integer = 0 To 10
Me.DataGridView1.Rows.Add(i, i)
Next
For j As Integer = 0 To Me.DataGridView1.Rows.Count - 1
Me.DataGridView1.Rows(j).Cells(1).Value = False
Next
End Sub
Private Sub DataGridView1_CellMouseLeave(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellMouseLeave
Dim cbxCell2 As DataGridViewCheckBoxCell
For Each DGVRows2 In DataGridView1.SelectedRows
cbxCell2 = CType(DGVRows2.Cells(1), DataGridViewCheckBoxCell)
If cbxCell2.Value Then
cbxCell2.Value = False
End If
Next
End Sub
Private Sub DataGridView1_SelectionChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DataGridView1.SelectionChanged
Dim cbxCell As DataGridViewCheckBoxCell
For Each DGVRows In DataGridView1.SelectedRows
cbxCell = CType(DGVRows.Cells(1), DataGridViewCheckBoxCell)
If Not cbxCell.Value Then
cbxCell.Value = True
End If
Next
End Sub
End Class
some small corections and i'll comeback...there are mistakes.....!!
ASKER
Thanks jtoutou
ASKER
Hi klakkas,
Your suggestion on Dim SelectedIndices As New List(Of Integer) is good but I see a long procedure in maintaing the rows selected and deselected.Will cell formatting help me in this ?
Your suggestion on Dim SelectedIndices As New List(Of Integer) is good but I see a long procedure in maintaing the rows selected and deselected.Will cell formatting help me in this ?
ASKER