Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB.NET: [VB.Net] DragAndDrop, DataGridView

Sivun loppuun

novice [14.12.2009 20:09:39]

#

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ä)?

novice [15.12.2009 11:00:29]

#

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

novice [15.12.2009 15:30:15]

#

Eipäs homma onnistukkaan noin...
Miten saan DragDrop tapahtumassa selville rivinumeron mihin data ollaan pudottamassa?

groovyb [15.12.2009 16:32:28]

#

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/DataGridView_Drag-n-Drop.aspx

novice [16.12.2009 09:37:04]

#

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.

novice [16.12.2009 10:54:19]

#

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?

groovyb [16.12.2009 13:21:11]

#

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();

}

}

}

novice [16.12.2009 15:04:32]

#

Juu, on tuota kokeiltu. Eventti ei vain käynnisty kun soluun tullaan hiiren nappi pohjassa.

groovyb [16.12.2009 15:48:15]

#

siis toimiiko drag n drop nyt vai haluatko jotain "efektiä" tai muuta vastaavaa, eli vaikka että kursorin alla oleva solu olisi korostettuna.

novice [16.12.2009 18:32:58]

#

Joo, siis DragAndDrop toimii, mutta haluaisin, että rivi mihin ollaan pudottamassa olisi korostettu esim. eri värillä.

tsuriga [17.12.2009 00:53:22]

#

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.

novice [17.12.2009 10:27:32]

#

Eipä käynnisty Mousemove-eventti.

Ja tuo WPF tuntuu äkkiseltään liian hankalalta minulle... on muuten viallinen tuo linkki.

groovyb [17.12.2009 15:46:07]

#

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


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta