vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
TOP-Angebot: 17 bzw. 24 Entwickler-Vollversionen zum unschlagbaren Preis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
XML: suchen und ersetzen im Datagridview? 
Autor: Krischan86
Datum: 08.07.11 07:22

Guten Morgen!

Ich habe in meinem Programm eine XML-Datenbank geladen (DataSet) und diese in einem Datagridview dargestellt. nun suche ich verzweifelt eine möglichkeit für eine "suchen und ersetzen"-funktion. am besten für die ausgewählte spalte, bzw. ausgewählte zellen. bin blutiger vb net anfänger und freue mich über jede hilfe. nutze das NET framework 4
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: XML: suchen und ersetzen im Datagridview? 
Autor: Manfred X
Datum: 08.07.11 08:13

Hallo!

Was meinst Du mit "in einem DatagridView dargestellt".
Gebunden?

Unter der Annahme, die Daten stehen in einer Datatable,
kannst Du die Rows-Auflistung der Table durchlaufen und in
der betreffenden Spalte jeweils den aktuellen Zeilen-Wert mit
dem Suchwert vergleichen und ihn ggf. ersetzen.
Kleine Demo:
Dim dtbl As New System.Data.DataTable
 
With dtbl
     'Eine Spalte (Typ: String) und einige Testzeilen erstellen
     .Columns.Add("Testspalte", GetType(String))
     .Rows.Add("Finger weg")
     .Rows.Add("Such mich")
     .Rows.Add("Hau ab")
     .Rows.Add("Such mich auch")
 
     'Zeilen durchlaufen
     For r As Integer = 0 To .Rows.Count - 1
        If CType(.Rows(r).Item("Testspalte"), String).StartsWith("Such") Then
           'Ersetzung durchführen
           .Rows(r).Item("Testspalte") = "Hab Dich"
        End If
     Next r
End With
Die Datentypen der Spalte, des Suchwertes und des Ersetzwertes müssen
kompatibel sein (im Beispiel: String).

MfG
Manfred

Beitrag wurde zuletzt am 08.07.11 um 08:16:26 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: XML: suchen und ersetzen im Datagridview? 
Autor: Krischan86
Datum: 08.07.11 09:37

Zitat:


Was meinst Du mit "in einem DatagridView
dargestellt"
Gebunden?


Was genau versteht man unter gebunden?
So schaut's bisher aus:
'Datei Laden
    Private Sub LadenToolStripMenuItem_Click(ByVal sender As System.Object, _
      ByVal e As System.EventArgs) Handles LadenToolStripMenuItem.Click
        'wenn OK geklickt wird
        If OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
            'Listbox leeren
            ListBox1.Items.Clear()
            'datensatz leeren
            DataSet1.Clear()
            'datagridview neu laden
            DataGridView1.Refresh()
            'XML aus dem Dialog öffnen als DataSet
            DataSet1.ReadXml(OpenFileDialog1.FileName)
            'Listbox einträge aus der Tabellenzahl der XML Datei zählen
            For i = 0 To DataSet1.Tables.Count - 1
                'Eintrag hinzu
                ListBox1.Items.Add(DataSet1.Tables(i).TableName)
            Next
        End If
    End Sub
 
 'dataGridview füllen
    Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, _
      ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
        DataGridView1.DataSource = DataSet1.Tables(ListBox1.SelectedItem)
        'Spalten automatisch anpassen
        DataGridView1.AutoResizeColumns()
        var_zeilenzahl = Convert.ToString(DataGridView1.RowCount - 1)
        LabelZeilenZahl.Text = var_zeilenzahl
        var_spaltenzahl = Convert.ToString(DataGridView1.ColumnCount - 1)
        LabelSpaltenZahl.Text = var_spaltenzahl
    End Sub
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: XML: suchen und ersetzen im Datagridview? 
Autor: Manfred X
Datum: 08.07.11 10:25

Hallo!

"Gebunden" meint genau das was Du machst:
die Zuweisung einer Datatable auf die Datasource-Eigenschaft
eines DatagridView-Control.

Das Grid dient in dem Fall zur Anzeige, die Aufbewahrung der Daten
erfolgt in der Datatable.

Setze einfach:

dtbl = Dataset1.Tables(ListBox1.SelectedItem)
und Du kannst die Rows-Auflistung von dtbl für Suchen/Ersetzen in einer Spalte
durchlaufen, wie in meinem Beispiel von oben.

Alternativ kannst Du die Table an eine Instanz von "Bindingsource" binden
(DataSource) und die Filter-Methode verwenden, um die Zeilen auszuwählen,
die einem Suchmuster entsprechen.

MfG
Manfred

Beitrag wurde zuletzt am 08.07.11 um 10:27:50 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: XML: suchen und ersetzen im Datagridview? 
Autor: Krischan86
Datum: 08.07.11 10:45

Danke sehr!

bin schon nen schritt weiter
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: XML: suchen und ersetzen im Datagridview? 
Autor: Krischan86
Datum: 08.07.11 12:12

Hello again Muss nochmal stören:

ich bekomme es nicht so zum laufen, wie ich mir das vorstelle...
ich möchte nämlich eine bestimmte zeichenfolge löschen, den rest der zelle aber beibehalten. nach manfreds methode wird die gesamte zelle ersetzt. mein ansatz wäre: zellinhalt in variable (string), variable "beschneiden", neue variable wieder in zelle schreiben, nächste reihe.. usw.

mit fehlen leider selbst die grundlegensten befehle in diesem zusammenhang und google spuckt nicht allzuviel aus...
hat evtl. jemand ne gute referenz zu dem thema dataset, datagridview und datatable, gerne auch für anfänger ?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: XML: suchen und ersetzen im Datagridview? 
Autor: Code_mancer
Datum: 08.07.11 12:50

Modifiziere diesen Part folgendermaßen:

If CType(.Rows(r).Item("Testspalte"), String).StartsWith("Such") Then
            'Ersetzung durchführen
            .Rows(r).Item("Testspalte") = .Rows(r).Item( _
              "Testspalte").ToString.Replace("Such", "Ersetz")
        End If

--------------------

Ich habe keine besondere Begabung, sondern bin nur leidenschaftlich neugierig.
- Albert Einstein

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: XML: suchen und ersetzen im Datagridview? 
Autor: Krischan86
Datum: 08.07.11 14:46

Leider hab ich immernoch ein problem mit der durchführung, wie gehe ich mit so einer fehlermeldung um? und was bedeutet diese?

System.InvalidCastException wurde nicht behandelt.
Message=Ungültige Konvertierung von Typ DBNull in Typ String.
Source=Microsoft.VisualBasic
StackTrace:
bei Microsoft.VisualBasic.CompilerServices.Conversions.ToString(Object Value)
bei Eplan_P8_XML_Filter.Ersetzen.Button1_Click(Object sender, EventArgs e) in C:\Dokumente und Einstellungen\c.klasen\Eigene Dateien\Visual Studio 2010\Projects\Eplan P8 XML Filter\Eplan P8 XML Filter\Ersetzen.vb:Zeile 16.
bei System.Windows.Forms.Control.OnClick(EventArgs e)
bei System.Windows.Forms.Button.OnClick(EventArgs e)
bei System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
bei System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
bei System.Windows.Forms.Control.WndProc(Message& m)
bei System.Windows.Forms.ButtonBase.WndProc(Message& m)
bei System.Windows.Forms.Button.WndProc(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
bei System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
bei System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
bei System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
bei System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
bei System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
bei System.Windows.Forms.Application.Run(ApplicationContext context)
bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
bei Eplan_P8_XML_Filter.My.MyApplication.Main(String[] Args) in 17d14f5c-a337-4978-8281-53493378c1071.vb:Zeile 81.
bei System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
bei System.AppDomain.nExecuteAssembly(RuntimeAssembly assembly, String[] args)
bei System.Runtime.Hosting.ManifestRunner.Run(Boolean checkAptModel)
bei System.Runtime.Hosting.ManifestRunner.ExecuteAsAssembly()
bei System.Runtime.Hosting.ApplicationActivator.CreateInstance(ActivationContext activationContext, String[] activationCustomData)
bei System.Runtime.Hosting.ApplicationActivator.CreateInstance(ActivationContext activationContext)
bei System.Activator.CreateInstance(ActivationContext activationContext)
bei Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssemblyDebugInZone()
bei System.Threading.ThreadHelper.ThreadStart_Context(Object state)
bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
bei System.Threading.ThreadHelper.ThreadStart()
InnerException:


hier nochmal der code der das auslöst:
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _
      System.EventArgs) Handles Button1.Click
        Dim dtbl As New System.Data.DataTable
        dtbl = Form1.DataSet1.Tables(Form1.ListBox1.SelectedItem)
        With dtbl
            For r As Double = 0 To .Rows.Count - 1
                If CType(.Rows(r).Item("P_ARTICLE_DESCR3"), String).StartsWith( _
                  "??_??@") Then
                    'Ersetzung durchführen
                    .Rows(r).Item("P_ARTICLE_DESCR3") = .Rows(r).Item( _
                      "P_ARTICLE_DESCR3").ToString.Replace("??_??@", "")
                End If
 
            Next r
        End With
 
 
    End Sub
nicht wundern über den komischen spaltennamen und die fragezeichen, die xml die ich bearbeiten will entstammt einer cad-software (eplan p8, artikeldatenbank)
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: XML: suchen und ersetzen im Datagridview? 
Autor: Code_mancer
Datum: 08.07.11 15:01

Vermutlich tritt das Problem hier auf:

CType(.Rows(r).Item("P_ARTICLE_DESCR3"), String)
Mein Anhaltspunkt:

"Message=Ungültige Konvertierung von Typ DBNull in Typ String."

Du kriegst von der Datenbank ein Wert des Typs DBNull zurück. Der CType versucht, diesen als String zu "deklarieren" und fällt auf die Nase.

Versuch auch dort mal ein ".Rows(r).Item("P_ARTICLE_DESCR3").ToString"

--------------------

Ich habe keine besondere Begabung, sondern bin nur leidenschaftlich neugierig.
- Albert Einstein

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: XML: suchen und ersetzen im Datagridview? 
Autor: Manfred X
Datum: 09.07.11 06:00

Hallo!

Manche Datenbank-Spalten erlauben es, dass in einer Zeile kein
Wert eingetragen ist. Das wird in Net als "DBNull(value)" wiedergegeben.

Um zu erkennen, ob in einer Zelle "kein Wert" eingetragen ist,
gibt es die Abfrage-Funktion IsDBNull.

Um in einem String einen Teilstring durch einen anderen zu ersetzen,
kannst Du die bewährte Funktion "Microsoft.Visualbasic.Replace" verwenden.
Sie erlaubt es unter anderem, als Parameter anzugeben, wie viele Ersetzungen
ab welcher Startposition vorgenommen werden sollen.

(Die Verwendung der ToString-Methode wird nicht empfohlen.
Die String.Replace-Methode ersetzt ALLE Vorkommen eines Teilstrings.)

Ich habe mein kleines Beispiel von oben ein wenig erweitert ....
Jetzt wird der Start-Teilstring "Suche" durch "Finde" ersetzt.
Dim dtbl As New System.Data.DataTable
 
With dtbl
    .Columns.Add("Testspalte", GetType(String))
    .Columns(0).AllowDBNull = True  'Diese Spalte erlaubt fehlende Werte
    .Rows.Add("Finger weg")
    .Rows.Add("Suche mich")
    .Rows.Add("Hau ab")
    .Rows.Add(DBNull.Value)         'In dieser Zeile fehlt ein Wert
    .Rows.Add("Suche mich auch")
 
    Dim cellcontent As String
 
    For r As Integer = 0 To .Rows.Count - 1
        If Not IsDBNull(.Rows(r).Item("Testspalte")) Then
           cellcontent = DirectCast(.Rows(r).Item("Testspalte"), String)
           If cellcontent.StartsWith("Suche") Then
              cellcontent = Microsoft.VisualBasic.Replace _
              (cellcontent, "Suche", "Finde", 1, 1, CompareMethod.Text)
              .Rows(r).Item("Testspalte") = cellcontent
           End If
        End If
    Next r
End With
MfG
Manfred
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: XML: suchen und ersetzen im Datagridview? 
Autor: Krischan86
Datum: 13.07.11 07:17

Danke für eure Hilfe, klappt prima
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel