Tervehdys
1. Miten saan tietoon datagridview:n rivinumeron ennen pudotusta? Siis mille riville ollaan pudottamassa...
2. Miten saan kohderivin reagoimaan jotenkin ennen pudotusta (esim vaihtamaan väriä)?
Homma ratkesi ikäänkuin itsestään...ilman apua, tässä koodi jos jotain kiinnostaa:
Private Sub DataGridView_CellMouseEnter(ByVal sender As System.Object, ByVal e As DataGridViewCellEventArgs) Handles DataGridView1.CellMouseEnter Dim dgv As DataGridView = sender Dim index As Integer = e.RowIndex If index > -1 Then dgv.Rows(index).Selected = True TextBox1.Text = index End If End Sub Private Sub DataGridView_CellMouseLeave(ByVal sender As System.Object, ByVal e As DataGridViewCellEventArgs) Handles DataGridView1.CellMouseLeave Dim dgv As DataGridView = sender Dim index As Integer = e.RowIndex If index > -1 Then dgv.Rows(index).Selected = False End If End Sub
Eipäs homma onnistukkaan noin...
Miten saan DragDrop tapahtumassa selville rivinumeron mihin data ollaan pudottamassa?
vaikka näin, saat selville rivin ja solun, jos solua on painettu.
Private Sub DataGridView1_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellClick Dim i, j As Integer i=e.rowIndex j=e.columnIndex TextBox1.Text = DataGridView1.Item(i, j).Value End Sub
tässä pieni tutoriaali:
http://www.codeproject.com/KB/cpp/
Mutta DragDrop tapahtumassahan solua ei klikata, vaan hiiren nappi on pohjassa kun kursori tuodaan dgv:n päälle.
Nyt pitäisi nimenomaan saada tietoon rivinumero jonka päällä DragDrop eventti suoritetaan. Yllä oleva CellMouseEnter eventti ei käynnisty kun hiiri tuodaan solun päälle nappi pohjassa.
Sain rivinumeron selville näin:
Private Sub DGV_DragDrop(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles DataGridView1.DragDrop Dim d As Point = DataGridView1.PointToClient(New Point(e.X, e.Y)) Dim hti As DataGridView.HitTestInfo = DataGridView1.HitTest(d.X, d.Y) Console.WriteLine("Rivinumero: " & hti.RowIndex) End Sub
Tietääkö joku miten saisin vielä DragDrop eventissä kohderivin jotenkin reagoimaan kun hiiri viedään päälle nappi pohjassa?
tässä C# esimerkki jonka netistä bongasin:
eli kokeileppa CellMouseEnter eventtiä
private void dataGridView1_CellMouseEnter(object sender, DataGridViewCellEventArgs e) { if (e.ColumnIndex > -1 && e.RowIndex > -1) { if (dataGridView1[e.ColumnIndex, e.RowIndex].Value != null) { label1.Text = dataGridView1[e.ColumnIndex, e.RowIndex].Value.ToString(); } } }
Juu, on tuota kokeiltu. Eventti ei vain käynnisty kun soluun tullaan hiiren nappi pohjassa.
siis toimiiko drag n drop nyt vai haluatko jotain "efektiä" tai muuta vastaavaa, eli vaikka että kursorin alla oleva solu olisi korostettuna.
Joo, siis DragAndDrop toimii, mutta haluaisin, että rivi mihin ollaan pudottamassa olisi korostettu esim. eri värillä.
Jos WPF kelpaa:
<Style x:Key="RowStyle" TargetType="my:DataGridRow"> <Style.Triggers> <Trigger Property="IsMouseOver" Value="True"> <Setter Property="Background" Value="#FF78A5F4" /> </Trigger> </Style.Triggers> </Style>
(lainattu osoitteesta http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/a5fd5413-f055-4b56-83af-6d6bdb1d6fe9)
Tai miten olis DataGridille MouseMove-eventti? Laukeeako se, kun kursori on painettuna alas?
Mod. korjasi linkin.
Eipä käynnisty Mousemove-eventti.
Ja tuo WPF tuntuu äkkiseltään liian hankalalta minulle... on muuten viallinen tuo linkki.
ongelma tulee siinä, että datagridview:n mouse-eventit laukeavat vain sen objektin sisällä. kun olet painanut hiiren nappia sen ulkopuolella, eivät nuo eventit laukea. Pointteri ei ikinä saavu soluun jos nappia on jo painettu. pointteri on "vapaa" vain kun hiiren nappi on ylhäällä. tai simuloitu ylös.
lisäinfoa täältä:
http://social.msdn.microsoft.com/forums/en-US/winforms/thread/057da366-82d8-4507-acbf-ab778f8cab96
sun tarttee simuloida mouseUp päälle, tai vetää pientä koukkua windowsiin.
MUTTA
jos Drag n droppaat datagridviewistä solusta soluun -tyylillä, etkä siis objektin ulkopuolista dataa, datagridviewX.CellMouseEnter toimii. et saa sitä hiiren nappia painaa objektin ulkopuolella jos haluat että nuo datagridview:n mouse eventit toimii. siis ilman kikkailua
Aihe on jo aika vanha, joten et voi enää vastata siihen.