Benutzer mit den meisten Antworten
Dataset zu befüllen

Frage
-
http://www1.minpic.de/bild_anzeigen.php?id=143508&key=26645102&ende
Hallo,
welche Möglichkeiten gibt es ein Dataset zu befüllen?
Nur über ein DatagridView ? Oder auch über das Studio?
Ich will es einmalig anlegen, dann nur noch einlesen.
Grüße Andreas
Antworten
-
Hallo Andreas,
evtl. solltest Du dich mehr mit dem Code und weniger mit der Klicki-Klacki Oberfläche beschäftigen.
Ein DataSet kann man sehr einfach über einen DataAdapter füllen.
http://msdn.microsoft.com/de-de/library/system.data.sqlclient.sqldataadapter.fill.aspx
http://msdn.microsoft.com/de-de/library/zxkb3c3d.aspx
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort markiert Andreas Bauer2 Sonntag, 17. April 2011 06:48
-
Hallo Andreas,
es gibt viele Methoden, ein DataSet zu erstellen/befüllen.
Manuell, von Visual Studio automatisiert, aus einem Datanbank-Schema automatisiert abgeleitet, über eigene T4 Templates erzeugt, mit typsicherem Schema, ohne typsicheres Schema. Es käme halt darauf an, was der Kontext Deines Wunsches ist. Das einmaligen Anlegen, dann nur noch auslesen lässt da noch zu viele Optionen offen, als dass ich Dir jetzt "eine spezielle" Methode empfehlen könnte.
[Hier] habe ich zum Beispiel mal beschrieben, wie man ein leeres DataSet mit einem eigenen Schema erstellt. Auch das gäbe es andere Möglichkeiten - je nach Anforderung.Ansonsten kann man auch einfach manuell einen DataTable und Rows zufügen [Beispiele].
ciao Frank- Als Antwort markiert Andreas Bauer2 Sonntag, 17. April 2011 06:47
-
Hallo Andreas,
ist schon ok, wenn der Kunde das mit einem eigenen DataSource auswählen kann.
Lösung ok :-)Es gibt manchmal auch Lösungen, wo diese Auswahl aus den Daten automatisiert generiert wird, aber das passt nicht immer, denn ein bestimmter Auswahl-Wert ist ggf. nicht in den Daten, soll aber auswählbar sein.
ciao Frank- Als Antwort markiert Andreas Bauer2 Montag, 18. April 2011 19:42
-
Hallo Andreas,Du meinst hier wahrscheinlich die Rows der Sicht und nicht der Datenquelle ... :in meinem Beispiel (Du hast ja jetzt anscheinend vieles wieder geändert) ist das zum Beispiel so:
var angle = ds.tblAngle.DefaultView.Cast<DataRowView>(). First(r => r["DisplayText"].ToString() == "180°").Row["AngleRef"];
Für die Datenquelle selber wäre es einfach zum Beispiel:var angleD = ds.tblAngle.First(r => r.DisplayText == "180°").AngleRef;
ciao Frank- Als Antwort markiert Andreas Bauer2 Dienstag, 19. April 2011 18:28
Alle Antworten
-
Hallo Andreas,
evtl. solltest Du dich mehr mit dem Code und weniger mit der Klicki-Klacki Oberfläche beschäftigen.
Ein DataSet kann man sehr einfach über einen DataAdapter füllen.
http://msdn.microsoft.com/de-de/library/system.data.sqlclient.sqldataadapter.fill.aspx
http://msdn.microsoft.com/de-de/library/zxkb3c3d.aspx
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort markiert Andreas Bauer2 Sonntag, 17. April 2011 06:48
-
Hallo Andreas,
es gibt viele Methoden, ein DataSet zu erstellen/befüllen.
Manuell, von Visual Studio automatisiert, aus einem Datanbank-Schema automatisiert abgeleitet, über eigene T4 Templates erzeugt, mit typsicherem Schema, ohne typsicheres Schema. Es käme halt darauf an, was der Kontext Deines Wunsches ist. Das einmaligen Anlegen, dann nur noch auslesen lässt da noch zu viele Optionen offen, als dass ich Dir jetzt "eine spezielle" Methode empfehlen könnte.
[Hier] habe ich zum Beispiel mal beschrieben, wie man ein leeres DataSet mit einem eigenen Schema erstellt. Auch das gäbe es andere Möglichkeiten - je nach Anforderung.Ansonsten kann man auch einfach manuell einen DataTable und Rows zufügen [Beispiele].
ciao Frank- Als Antwort markiert Andreas Bauer2 Sonntag, 17. April 2011 06:47
-
Das einmaligen Anlegen, dann nur noch auslesen lässt da noch zu viele Optionen offen, als dass ich Dir jetzt "eine spezielle" Methode empfehlen könnte.
Hallo Frank,
die Grundidee ist einfach eine Liste von 30 Items einzulesen.
Die müssen einmalig angelegt werden, und dann für den User über eine Combobox auswählbar zur Verfügung stehen.
Mehr nicht. Per Hand zu befüllen ist etwas mühselig, da ich 4 so Listen habe.
Ändert sich nie, so eine Art Konfig eben.
Grüße Andreas
- Bearbeitet Andreas Bauer2 Sonntag, 17. April 2011 06:48 Formatierung
-
Hallo Andreas,
wo sollen denn die (Listen) Daten herkommen? Im Code definiert - in einer XML-Datei definiert?
Wenn Du Konfig sagst, so hört sich das nicht so an, dass die Daten aus einer Datenbank kommen, und dann wäre der DataAdapter zum Beispiel eher ungeeignet.
ciao Frank -
wo sollen denn die (Listen) Daten herkommen? Im Code definiert - in einer XML-Datei definiert?
Wenn Du Konfig sagst, so hört sich das nicht so an, dass die Daten aus einer Datenbank kommen, und dann wäre der DataAdapter zum Beispiel eher ungeeignet.
Hallo Frank,
nein, typisch zum Beispiel.
- Ref, Wert
0, 0°
1, 45°
2, 90°
3, 135°
....
n 360°
Das lade ich in eine Combobox. Das Hauptdataset sepcihert eben nur die Ref.
Grüße Andreas
-
Hallo Andreas,
ich muss leider das dritte mal das gleiche fragen.
- und diese "Ref/Produkt/WinkelRef"-Daten (der Tabelle Main) - wo kommen die her?
Sind die im Code (zum Beispiel über eigene Listen) gespeichert?
Oder wo sonst (Datenbank, oder Datei, ...) kommen sie her?
Man könnte jetzt vermuten, die Speicher-Struktur ist ein DataTable (denn Du hast das Wort Tabelle benutzt).
ciao Frank - und diese "Ref/Produkt/WinkelRef"-Daten (der Tabelle Main) - wo kommen die her?
-
http://www1.minpic.de/bild_anzeigen.php?id=143799&key=37903250
<?xml version="1.0" encoding="utf-8"?> <DataSetROptions xmlns="http://tempuri.org/DataSetROptions.xsd"> <tblAngle> <AngleRef>0</AngleRef> <Value>0</Value> <DisplayText>0°</DisplayText> </tblAngle> <tblAngle> <AngleRef>1</AngleRef> <Value>90</Value> <DisplayText>90°</DisplayText> </tblAngle> <tblAngle> <AngleRef>2</AngleRef> <Value>180</Value> <DisplayText>180°</DisplayText> </tblAngle>
Hallo Frank,
kein Problem, wenn es auch anders geht, gerne nehme ich Tipps entgegen.
Ich möchte über eine Combobox Winkel, Variablen auswählen können. Mehr nicht.
Grüße Andreas
-
Hallo Andreas,
Du hast zwar immernoch nicht gesagt, woher die Daten real kommen, aber jetzt lässt sich vermuten, dass es wohl eine XML-Datei ist, die in Deinem Projekt ist und wohl bei der Auslieferung ggf. ins Ausführungsverzeichnis gespielt wird. Wenn Du nur einen Winkel auswählen lassen willst, ist das dann sehr einfach, etwa:
DataSetROptions ds = new DataSetROptions(); ds.ReadXml(Path.Combine(Application.StartupPath, "Winkel.xml")); ComboBox cboWinkel = new ComboBox(); Controls.Add(cboWinkel); cboWinkel.DataSource = ds.tblAngle; cboWinkel.DisplayMember = "DisplayText";
[Aus XML mittels XSD.exe automatisch Schreib-Lese-Zugriffe generieren]
http://dzaebel.net/XmlXsdLesenSchreiben.htmBTW ... in Deiner XML-Datei fehlt das schliessende Tag:
</DataSetROptions>
ciao Frank
-
DataSetROptions ds = new DataSetROptions(); ds.ReadXml(Path.Combine(Application.StartupPath, "Winkel.xml")); ComboBox cboWinkel = new ComboBox(); Controls.Add(cboWinkel); cboWinkel.DataSource = ds.tblAngle; cboWinkel.DisplayMember = "DisplayText";
Hallo Frank,ja es gibt ein Hauptdataset XML Datei halt. Diese hat eine Spalte 'RefAngle', die speichert den Wert der Combobox.
Nur so wie oben bei Dir, geht es nicht. Beim Öffnen der XML Datei, wäre ja der RefAngle nicht hinterlegt.
Es gibt auch noch eine Combobox mit 30 Werten, di am Anfang konfiguriert werden, dann in der Regel eine längere Laufzeit haben.
Grüße Andreas.
-
Hallo Andreas,
was Du genau willst, ist noch nicht 100% klar.
ich habe "DisplayText" genommen, weil da ein Winkel in Text-Form drin ist.
Wenn Du den "AngleRef" benötigst, dann nimmst Du halt:cboWinkel.DisplayMember = "AngleRef";
oder typsicher:
cboWinkel.DisplayMember = ds.tblAngle.AngleRefColumn.ColumnName;
und wenn nur "Wert": AngleRef und die Anzeige "DisplayText" sein soll, dann zum Beispiel:cboWinkel.DisplayMember = ds.tblAngle.DisplayTextColumn.ColumnName; cboWinkel.ValueMember = ds.tblAngle.AngleRefColumn.ColumnName;
ciao Frank
-
Hallo Andreas,
was Du genau willst, ist noch nicht 100% klar.
Hallo Frank,ich weiß nicht wie ich es sagen soll.
Hauptdataset
XML Datei
Hat eine Spalte Angle, eine Spalte Variablen, eine Spalte Einheiten.
Der Kunde will jetzt hier auswählen können. Was genau drin stehen soll möchtge er einmalig konfigurieren, um über die Combobox es wählbar anbieten zu können. Deshalb hat jede Combobox ein eigenes Dataset.
Lösung, gut oder schlecht. Ich weiß es nicht, deshalb frage ich, ob es bessere Ansätze gibt.
Gruß, Andreas
-
Hallo Andreas,
ist schon ok, wenn der Kunde das mit einem eigenen DataSource auswählen kann.
Lösung ok :-)Es gibt manchmal auch Lösungen, wo diese Auswahl aus den Daten automatisiert generiert wird, aber das passt nicht immer, denn ein bestimmter Auswahl-Wert ist ggf. nicht in den Daten, soll aber auswählbar sein.
ciao Frank- Als Antwort markiert Andreas Bauer2 Montag, 18. April 2011 19:42
-
cboWinkel.DisplayMember = ds.tblAngle.AngleRefColumn.ColumnName;
und wenn nur "Wert": AngleRef und die Anzeige "DisplayText" sein soll, dann zum Beispiel:cboWinkel.DisplayMember = ds.tblAngle.DisplayTextColumn.ColumnName; cboWinkel.ValueMember = ds.tblAngle.AngleRefColumn.ColumnName;
Hallo,
vielleicht noch abschließend.Wie könnte man das schneller einfacher abfragen?
Ich weiß den Namen und möchte die Ref haben.public int GetVariableRefFromName(string name) { int variableRef = -1; System.Data.DataView dvVariables = tblVariables.DefaultView; foreach (System.Data.DataRowView drv in dvVariables) { tblVariablesRow tblVRow = (tblVariablesRow)drv.Row; if (tblVRow.Name == name) { variableRef = tblVRow.VariableRef; break; } } return variableRef; }
Grüße Andreas
- Bearbeitet Andreas Bauer2 Dienstag, 19. April 2011 17:50 F
-
Hallo Andreas,Du meinst hier wahrscheinlich die Rows der Sicht und nicht der Datenquelle ... :in meinem Beispiel (Du hast ja jetzt anscheinend vieles wieder geändert) ist das zum Beispiel so:
var angle = ds.tblAngle.DefaultView.Cast<DataRowView>(). First(r => r["DisplayText"].ToString() == "180°").Row["AngleRef"];
Für die Datenquelle selber wäre es einfach zum Beispiel:var angleD = ds.tblAngle.First(r => r.DisplayText == "180°").AngleRef;
ciao Frank- Als Antwort markiert Andreas Bauer2 Dienstag, 19. April 2011 18:28