Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB.NET: DataGridViewRow DragDrop CastException

ari kood [23.09.2019 14:25:58]

#

Moi.

Tässä yksinkertaistettu esimerkki projektini ongelmasta jossa on tarkoitus sallia käyttäjän raahata DGV:n rivin tietoa toiselle riville.

Esimerkissä raahauksen ehtona on, että Value1 pitää olla molemmissa samat ja jos tämä totetutuu, muutetaan raahattavan rivin Value2 samaksi kuin kohderivin Value2.

Noh.. oli ehtoina mitä tahansa, saan virheilmoituksen (InvalidCastException) DGV:n DragOver tapahtumassa. Virheilmoitus tulee oudosti eri riveille riippuen siitä mitä riviä ollaan raahaamassa tai siitä missä järjestyksessä koodi on.

Kokeile vaikka raahata viimeistä riviä ylöspäin, niin saat virheilmoituksen riviltä: "Dim DragRow As DataGridViewRow = e.Data.GetData(GetType(DataGridViewRow))".

Ja jos vaihdat TargetRivien ja DragRivien (<-merkattu koodissa) paikkaa, saat virheilmoituksen riville: "If TargetValue1 <> DragValue1 Then"

Asialla on jotain tekemistä tyhjien solujen kanssa, sillä jos annan arvon jokaisen rivin Value2 soluun, homma toimii.

Saisin toiminnon luultavasti toimimaan jollain muullakin keinolla, mutta kiinnostaa, miksei tämä toimi näin, tai mikä on pielessä... osaako joku sanoa?


Niin ja tässä vielä tuo DragOver koodi jos joku ei jaksa ladata...

Private Sub DGV_DragOver(sender As Object, e As DragEventArgs) Handles DGV.DragOver

    Dim p As Point = DGV.PointToClient(New Point(e.X, e.Y))
    Dim TargetIndex = DGV.HitTest(p.X, p.Y).RowIndex




    'Target rivit
    Dim TargetRow As DataGridViewRow = DGV.Rows(TargetIndex)
    Dim TargetValue1 As Integer = TargetRow.Cells("Value1").Value
    Dim TargetValue2 As Integer? = TargetRow.Cells("Value2").Value

    'DragRivit
    Dim DragRow As DataGridViewRow = e.Data.GetData(GetType(DataGridViewRow))
    Dim DragValue1 As Integer = DragRow.Cells("Value1").Value
    Dim DragValue2 As Integer? = DragRow.Cells("Value2").Value


    If TargetValue1 <> DragValue1 Then
        e.Effect = DragDropEffects.None
    Else
        'If <Jotain muita ehtoja> Then
        'e.Effect = DragDropEffects.None
        'End If

        e.Effect = DragDropEffects.Link
    End If
End Sub

Vastaus

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

Tietoa sivustosta