DatagridView - Spalteninhalte maskieren

  • VB.NET

Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von Dome_2001.

    DatagridView - Spalteninhalte maskieren

    Hallo zusammen,

    ich habe eine DataGridView in der ich Links zu Dokumenten zur Verfügung stellen. Die Inhalte in der DatagridView hole ich mir aus einer Oracle Datenbank. Wenn ich nun auf den Link in der spalte klicke öffnet sich auch das entsprechende Dokument oder die Anwendung. Das klappt alles.

    Jetzt will ich aber in der DataGridView Spalte nicht den kompletten Pfad anzeigen sondern diesen Maskieren.

    Wie geht denn das? Habe leider auch nach suchen nichts gefunden oder nicht mit den richtigen Begriffen gesucht.

    Hat mir da jemand einen Tip bzw Codeschnipsel?

    Danke Euch!!

    Grüße

    Sven
    Hallo erstmal

    Ein paar Fragen an dich?
    Sicher das das etwas mit WPF, UWP oder der gleichen zu tun hat? Oder gehe ich richtig der Annahme das es sich hier um WinForms handelt??

    Weiters wäre es nicht schlecht wenn du der Community bekannt gibst wie du das DataGridView mit Daten befüllst. Ein wenig Code von dir ist in so einem Fall immer hilfreich.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Danke für die Hinweise.

    Es hat etwas mit WinForm zu tun.

    Codeschnipsel kann ich gerne zur Verfügung stellen

    Linkfunktion auf die Spalte die ich haben will mit entsprechender Row

    VB.NET-Quellcode

    1. Private Sub DGVVerlinkungen_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DGVVerlinkungen.CellContentClick
    2. If e.ColumnIndex = DGVVerlinkungen.Columns("DGVHeaderVerlinkungen").Index And e.RowIndex <> -1 Then
    3. Dim value As String = DGVVerlinkungen.Rows(e.RowIndex).Cells(e.ColumnIndex).Value
    4. Process.Start(value)
    5. End If
    6. End Sub​


    Anzeige der Links im DataGridViewer aus Oracle

    VB.NET-Quellcode

    1. ​Private Sub LinksAnzeigen_Click(sender As Object, e As EventArgs) Handles DGVRegeln.Click 'DGVRegelAnsp.Click '.ItemSelectionChanged DGVRegeln.Click '
    2. Dim i4aa As Integer
    3. If DGVRegeln.CurrentRow Is Nothing Then
    4. 'MsgBox("Bitte mit einem Partner die Chancensuche auslösen")
    5. Exit Sub
    6. Else i4aa = DGVRegeln.CurrentRow.Index
    7. End If
    8. Dim i4 As Integer = i4aa 'DGVRegeln.CurrentRow.Index
    9. Dim itm4a As Integer = 0 'i4
    10. Dim AnspText4 = DGVRegelAnsp.Rows(itm4a).Cells("DGVAnspText").Value.ToString
    11. 'Dim Abfrage6 As String = "select distinct LinkText from NBO_Links, NBO_AnspLinks, NBO_AnspText where LinkNr = Links_LinkNr and Links_Ansp_Nr = Ansp_Nr and Ansp_Text = '" & AnspText4 & "'"
    12. Dim Abfrage6 As String = "select distinct LinkText, LinkTextDsp from NBO_Links, NBO_AnspLinks, NBO_AnspText where LinkNr = Links_LinkNr and Links_Ansp_Nr = Ansp_Nr and Ansp_Text = '" & AnspText4 & "'"
    13. Dim itm4 As Integer
    14. DGVVerlinkungen.MultiSelect = False
    15. itm4 = DGVRegelAnsp.CurrentRow.Index
    16. Dim LinkText As String = ""
    17. DGVVerlinkungen.Rows.Clear()
    18. Me.DGVVerlinkungen.Columns(0).DefaultCellStyle.WrapMode =
    19. DataGridViewTriState.True
    20. Dim lnk As New DataGridViewLinkColumn()
    21. DGVVerlinkungen.Columns.Add(lnk)
    22. lnk.UseColumnTextForLinkValue = True
    23. Using connection4 As OracleConnection = New OracleConnection(oradb)
    24. Dim command4 As OracleCommand = connection4.CreateCommand()
    25. command4.CommandText = Abfrage6
    26. Try
    27. connection4.Open()
    28. Dim reader4 As OracleDataReader = command4.ExecuteReader()
    29. While reader4.Read()
    30. DGVVerlinkungen.Rows.Add(reader4(1).ToString, reader4(0).ToString, "1")
    31. 'LinkText = reader4.GetString(0) '(itm3)
    32. End While
    33. reader4.Close()
    34. Catch ex As Exception
    35. Console.WriteLine(ex.Message)
    36. End Try
    37. connection4.Close()
    38. Me.DGVVerlinkungen.Columns(0).DefaultCellStyle.WrapMode =
    39. DataGridViewTriState.True
    40. End Using
    41. DGVVerlinkungen.ClearSelection()
    42. End Sub


    Eventuell nicht ganz sauber geschrieben aber läuft :)

    Dome_2001 schrieb:

    Es hat etwas mit WinForm zu tun.

    OK, das nächste mal bitte im richtigem Unterforum Posten.

    *Thema verschoben* ~NoFear23m

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Dome_2001 schrieb:

    Jetzt will ich aber in der DataGridView Spalte nicht den kompletten Pfad anzeigen sondern diesen Maskieren.
    Was bedeutet "maskieren"?

    Also angenommen der link-Pfad "https://www.vb-paradise.de/index.php/Thread/128615-DatagridView-Spalteninhalte-maskieren/?postID=1113562#post1113562"
    Wie sähe der "maskiert" aus?

    Dome_2001 schrieb:

    Jetzt will ich aber in der DataGridView Spalte nicht den kompletten Pfad anzeigen sondern diesen Maskieren.

    Ich wage mal ein spekulatius ud sage er will statt C:\Temp\Unterodner\OrdnerZwo\Dateiname.png sowas in der Art wie C:\...\Dateiname.png haben.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Guten Morgen,

    ich würde gerne den Pfad:

    "https://www.vb-paradise.de/index.php/Thread/128615-DatagridView-Spalteninhalte-maskieren/?postID=1113562#post1113562" in der Spalte mit "VB-Paradise" nur anzeigen wollen, aber der Link soll trotzdem noch funktionieren.

    Oder das Beispiel von Sascha aufzunehmen, "C:\Temp\NeuerOrdner\Test.jpg" soll nur noch als "Bild-Test" angezeigt werden.

    Dachte, das Maskieren es am besten umschreibt.

    Danke

    Grüße

    Sven
    Naja, das ist kein Markieren. Ist ja ein völig anderer Wert, den musst du ja dann irgendwo hinterlegt haben.

    "Bild-Test" ist in "C:\Temp\NeuerOrdner\Test.jpg" ja nicht mal enthalten. Also von wo willst du das bekommen?

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Ich kann ja den Wert in der Tabelle mit ablegen wo ich den ich die restlichen Werte für die DataGridView habe.

    Sinngemäß habe ich mir das so gedachr.

    Zeige in DataGridView (DGV) Wert aus Tabelle A - AnzeigeName an aber bei Klick in die DGV soll der Pfad aus Tabelle A - Dateipfad ausgelöst werden.

    Grüße

    Sven

    Dome_2001 schrieb:

    Zeige in DataGridView (DGV) Wert aus Tabelle A - AnzeigeName an aber bei Klick in die DGV soll der Pfad aus Tabelle A - Dateipfad ausgelöst werden.

    Stimmt, aber ist eben kein Maskieren. Jetzt ist es schon klarer, nun kann dir @ErfinderDesRades sicher besser weiterhelfen.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Okay Danke für die Info. Wie wäre denn der korrekte Begriff für das was ich machen will? Dann könnt eich ja noch eine Suchmaschine bemühen und mal schauen was ich raus finde. Aber ich warte auch gerne noch auf Rückmeldung vom ErfinderDesRades.

    Grüße

    Sven
    Die Daten kommen in eine DataTable, dann gibt man dem DGV eine ComboBox-Column, dieser Column gibt man als DataSource diese DataTable (was automatisch eine BindingSource generiert), und dann sagt man, dass als DiplayMember der Kurzname angezeigt wird und der ValueMember ... tja, den könntest Du auf den eigentlichen Link setzen. Dann musst Du eben im DGV_CellClick-EventHandler jenen ValueMember in einen String casten und fertig. Noch Fragen ;)
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    VaporiZed schrieb:

    Die Daten kommen in eine DataTable, dann gibt man dem DGV eine ComboBox-Column, dieser Column gibt man als DataSource diese DataTable (was automatisch eine BindingSource generiert), und dann sagt man, dass als DiplayMember der Kurzname angezeigt wird und der ValueMember ... tja, den könntest Du auf den eigentlichen Link setzen. Dann musst Du eben im DGV_CellClick-EventHandler jenen ValueMember in einen String casten und fertig. Noch Fragen ;)


    Okay, danke für die schnelle Antwort. Jetzt muss ich es nur noch verstehen. Also testen und ausprobieren :) Wenn ich Fragen habe, melde ich mich wieder.

    Danke, einfach klasse hier im Forum.

    Grüße

    Sven
    Öhm, ja. Siehe Post#12. Ich weiß zwar nicht, was Du genau gemacht hast, aber wohl nicht das, was ich geschrieben hab. Machen wir es doch mal so rum:

    Dome_2001 schrieb:

    jetzt habe ich es mal umgesetzt.
    Poste das doch mal bitte als konkreten Code.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Sodelle, endlich bin ich mal wieder zu diesem Thema gekommen.

    Mit folgendem Code habe ich es nun hinbekommen, dass ich in einer DataGridView über eine ComboxBoxColumn einen Link öffnen kann.

    VB.NET-Quellcode

    1. ​Public Class Form1
    2. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    3. Call Datenbefuellen()
    4. End Sub
    5. Sub Datenbefuellen()
    6. DataTable1.Rows.Add("Test_Data_1", "www.google.de")
    7. DataTable1.Rows.Add("Test_Data_2", "C:\Temp\OptIn_UbergabeVNR.txt")
    8. DataTable1.Rows.Add("Test-Data_3", "C:\Temp\UbergabeVNR.txt")
    9. End Sub
    10. Private Sub DataGridView1_EditingControlShowing(ByVal sender As Object, ByVal e As DataGridViewEditingControlShowingEventArgs) Handles DataGridView1.EditingControlShowing
    11. Dim comboBox As ComboBox = CType(e.Control, ComboBox)
    12. If (comboBox IsNot Nothing) Then
    13. 'Remove an existing event-handler
    14. RemoveHandler comboBox.SelectedIndexChanged, New EventHandler(AddressOf ComboBox_SelectedIndexChanged)
    15. 'Add the event handler.
    16. AddHandler comboBox.SelectedIndexChanged, New EventHandler(AddressOf ComboBox_SelectedIndexChanged)
    17. End If
    18. End Sub
    19. Private Sub ComboBox_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
    20. Dim comboBox As ComboBox = CType(sender, ComboBox)
    21. Dim bekannt As String = comboBox.SelectedValue.ToString
    22. MsgBox(bekannt)
    23. Process.Start(bekannt)
    24. End Sub
    25. End Class


    Dazu gehört natürlich noch die entsprechende Form und DataSet mit DataTable. Die habe ich jetzt nicht mit rein gepack.

    Aber das Teil macht noch nicht das was ich will. Jetzt habe ich das Thema das ich jeden Wert in die Comboxbox eintrage. Ich will aber das jeder Wert nicht gesammelt in Row 0 in der Combobox angezeigt und auswählbar ist. Sondern dass jeder Eintrag in einer eigenen Row in der DataGridView angezeigt wird. Zudem habe ich nur eine Lösung innerhalb vom Handle gefunden die auf Change Inhalt ComboBox reagiert. Das will ich nicht. Ich hätte gerne, dass es auf Klick auf den Wert in der Combobox direkt ausgelöst werden.

    Also kurz und knapp, ich habe gelernt wie ich mit Comboboxen DataSet Datatable usw umgehe bekomme es aber nicht so umgeschrieben wie ich es benötige.

    Jemand Tipps, Hinweise, Code Schnippsel?

    Danke Euch.

    Grüße

    Sven
    Oha, eine Zeile = ein Link. Hm. Ja, da habe ich Dich falsch verstanden. Mir fallen 2 Möglichkeiten ein.
    ComboBoxColumn-CellStyle auf Nothing und ReadOnly auf True setzen und dann im DataGridView_CellClick-EventHandler (Achtung, nicht im ich-mach-mal-einen-Doppelklick-aufs-DGV-und-lasse-mir-einen-EventHandler-erstellen-DataGridView_CellContentClick-EventHandler!):

    VB.NET-Quellcode

    1. Diagnostics.Process.Start(DirectCast(DirectCast(DokumentBindingSource.Current, DataRowView).Row, DeineTdsInstanz.DokumentRow).Link)


    alternativ: Du lässt das mit der ComboBoxColumn und dem tDS, machst eine normale LinkLabelColumn draus, schreibst Deine Kurzbezeichnungen da rein und wenn man dann auf die Kurzbezeichnung klickt, wird eine Liste durchgeschaut, in der Paare aus Kurzbezeichnung und Links hinterlegt sind, in der dann nach dem für die angeklickte Kurzbezeichnung passenden Link gesucht wird und dieser dann aufgerufen wird.
    Bilder
    • tDS.png

      3,43 kB, 509×126, 93 mal angesehen
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.