2009-03-30 8 views
1

(VS2008) Ich versuche, einen TableAdapter in einem typisierten DataSet zu konfigurieren, um nur eine bestimmte Teilmenge von Spalten aus dem Hauptschema der Tabelle, auf der es basiert, zurückgibt, aber es immer das gesamte Schema zurückgibt Spalten) mit leeren Werten in den Spalten, die ich weggelassen habe.TableAdapter, um nur ausgewählte Spalten zurückzugeben? (VS2008)

Der TableAdpater verfügt über die Standardmethoden Fill und GetData(), die vom Assistenten stammen und jede Spalte in der Tabelle enthalten. Dies ist in Ordnung. Ich habe dann eine neue parametrisierte Abfrage-Methode namens GetActiveJobsByCustNo (CustNo) hinzugefügt, und ich habe nur ein paar Spalten in der SQL-Abfrage enthalten, die ich eigentlich in dieser Tabellenansicht sein möchte.

Aber auch hier werden alle Spalten im Schema der Master-Tabelle zurückgegeben, mit leeren Werten für die Spalten, die ich weggelassen habe.

Der Grund, warum ich dies möchte, ist, so kann ich nur ein paar Spalten zurück, um diese Tabellenansicht mit AutoGenerateColumns in einem ASP.NET GridView verwenden. Dadurch, dass es mir jede Spalte im Schema zurückgibt, enthält meine Präsentation GridView viel mehr Spalten, die ich dem Benutzer zeigen möchte. Und ich möchte vermeiden, die Spalten in der GridView deklarieren zu müssen.

Antwort

1

Wird das stark typisierte Dataset in einer anderen Abfrage verwendet, die alle Zeilen aus der Tabelle zurückgibt?

Sie können eine Datenansicht mit dem stark typisierten Dataset erstellen und eine Datentabelle für Ihr DataGridView verfügbar machen.

Ich bin nicht sicher, was Ihre Anforderungen vollständig sind, aber dieses Beispiel soll Ihnen helfen:

DataView dv = new DataView(ds.<Your_Table>); 

// This will create a new data table with the same name, 
// But with only two columns from the original table. 
// This could then be bound to your data grid. 
DataTable dt = dv.ToTable(false, 
          ds.<Your_Table>.<Your_Column1Column>.ColumnName, 
          ds.<Your_Table>.<Your_Column1Column>.ColumnName); 
+0

Was meinen Sie mit "Erstellen einer Datenansicht"? Das habe ich versucht, indem ich einen neuen benutzerdefinierten TableAdapter mit dem Namen GetCustomersWithOpenOrders (CustNo) hinzufügte. – MattSlay

+0

Nein, die DataView-Klasse nachschlagen, Justin könnte recht haben. Es sitzt zwischen dem Tisch und dem Gitter. –

1

Wenn Sie eine neue Abfrage zu einem bestimmten Tableadapter hinzufügen, es wird das Schema zu übernehmen, in dem sie ist angefügt, weshalb Sie leere Werte für die Spalten erhalten, die Sie nicht möchten.

Da Sie erwähnt haben, dass Sie die Prozedur bereits erstellt haben, müssen Sie den Server-Explorer verwenden, um eine Verbindung zur Datenbank herzustellen, und diese gespeicherte Prozedur einfach in Ihren XSD-Arbeitsbereich ziehen. Dazu erstellen Sie einen separaten QueryAdapter, der nur die von Ihnen angegebenen Spalten enthält (immer noch stark typisiert) und Sie können stattdessen mit diesem GridView binden und interagieren.

+0

Keine gespeicherten Prozeduren hier. Ich habe eine weitere TableAdapter-Definition zusätzlich zu den Standarddefinitionen hinzugefügt. – MattSlay

+0

Gotcha. Kann der QueryAdapter Ihnen erlauben, ein existierendes TableAdapter/DataTable beim Einrichten zu spezifizieren? Ich denke, das ist immer noch der beste Weg. –

0

Löschen Sie einfach die Spalten, die Sie zur Laufzeit nicht möchten, bevor Sie an Ihre Gridview binden. Die zugrunde liegende Klasse ist nach wie vor nur eine DataTable.