2016-06-29 8 views
2

Ich habe derzeit eine Anwendung, die Sie nach einem bestimmten Speicherort, Besitzer, usw. suchen können, die einige grundlegende Informationen über das Gerät (e) zurückgibt. Ich habe diese Informationen über eine SQL-Abfrage abgerufen und in ein DataSet platziert, das dann in ein DataGridView-Objekt platziert wird. Ich versuche, eine Clear-Schaltfläche zu implementieren, die die Suchbegriffe sowie die Daten im DataGridView-Objekt entfernt.Löschen von DataGridView an DataSet gebunden, ohne Header zu verlieren VB.NET

Leider kann ich DataGridView.Rows.Clear() nicht verwenden, da mein DataGridView an ein DataSet gebunden ist. Ich stehe in Schwierigkeiten mit DataGridView.DataSource = Nothing, da dies nicht nur die Daten entfernt, die angezeigt wurde, sondern auch meine Kopfzeilen für Spalten, die ich für die DataGridView erstellt habe entfernt. Ich habe ein paar Lösungen ausprobiert, die ich gefunden habe, wie DataGridView.Refresh() und DataGridView.AutoGenerateColumns = false, aber diese haben bisher die Spaltenüberschriften entfernt.

Dies ist der Code, den ich zum Hinzufügen von Zeilen zum DataGridView-Objekt verwende;

Dim con As New SqlClient.SqlConnection(getConnectionString) 
     Dim cmd As New SqlCommand("SELECT asset.assetID, owner.ownerName, model.brand, asset.modelID, deviceOwner.serialNumber, deviceOwner.location, asset.dateAssessed from asset 
            join deviceOwner on asset.assetID = deviceOwner.assetID 
            join owner on deviceOwner.ownerID = owner.OwnerID 
            join model on asset.modelID = model.modelID where asset.dateAssessed = @checkDate", con) 
     cmd.Parameters.AddWithValue("@checkDate", searchEnterDate.Text.ToString) 
     con.Open() 
     Dim myDA As New SqlDataAdapter(cmd) 
     myDA.Fill(myDataSet, "MyTable") 
     displayResults.DataSource = myDataSet.Tables("MyTable").DefaultView 
     con.Close() 
     con = Nothing 

ich nach einer Lösung suchen, die mir erlauben, die Zeilen aus der Datagridview zu löschen, ohne das Entfernen der Spaltenüberschriften, damit ich die Clear-Taste bei Bedarf können aber auch weiterhin mit Spaltenüberschriften noch die Anzeige suchen.

+0

Wie wäre es ein zu schaffen DataTable mit nur den Spaltenüberschriften und weisen Sie es als Ihre DataSource, wenn Sie es "leeren" möchten? –

+0

Wenn die Spaltenüberschriften gleich sind, bedeutet dies, dass die Abfrage im Wesentlichen die gleiche ist, nur gefiltert. Anstatt eine neue Abfrage auszuführen, können Sie versuchen, den 'DefaultView.RowFilter' zu verwenden. – Plutonix

+0

Ich verwende eine DataView, die von der DataTable abgeleitet wurde, und setze den Filter nach Bedarf. – rheitzman

Antwort

1

Sie konnten die DataTableClone die Spalten hält aber „entfernt“ Daten:

Dim oldTable As DataTable = CType(displayResults.DataSource, DataView).Table 
Dim emptyTable As DataTable = oldTable.Clone() 
displayResults.DataSource = emptyTable ' or emptyTable.DefaultView 

oder DataRowCollection.Clear auf der alten Tabelle benutzen, die mehr Nebenwirkungen verursachen könnte:

oldTable.Rows.Clear() 
+0

Clone war was ich dachte. Gute Idee. – Bugs

+0

Das passt perfekt zu meinen Bedürfnissen. Danke für die Hilfe! Es gibt mir einige Fehler, wenn die Datentabelle bereits leer ist, aber ich kann an der Fehlerbehandlung dafür arbeiten! – Kione

Verwandte Themen