Laden...

Keine Properties bei Linq to EF vorhanden

Erstellt von oehrle vor 13 Jahren Letzter Beitrag vor 13 Jahren 2.407 Views
O
oehrle Themenstarter:in
461 Beiträge seit 2009
vor 13 Jahren
Keine Properties bei Linq to EF vorhanden

verwendetes Datenbanksystem: <SQL Express 2008>

Hi, kann mir jemand auf die Sprünge hellfen? Ich arbeite mich gerade in Linq to EF ein. Ich habe die Nordwind.mdb als EntityDataModel eingebunden, habe alle Tabellen angewählt und das System die Entitäten erzeugen lassen. Dann habe ic auf meiner Form einfach mal ein DataGridView platziert, ein Button dazu, um mal zu spielen. Nun möchte ich eine Abfrage erstellen:


 private void btn_Linq_Click(object sender, EventArgs e)
        {
           NordwindEntity nw = new NordwindEntity(Settings.Default.ConString);

            var test = from p in Artikel
                       where Artikel. ??
                       select p;


            dgv_test.DataSource = test;
        }

Ich bekomme bei Artikel. keine Properties angezeigt (Artikel ist eine Tabelle (Entität) bei der Nordwind-Datenbank). Warum? Ich sehe zwar, Artikel ist eingefärbt wie eine Klasse, aber kann das sein das ich von jeder Entität ers teine Instanz erstellen muss?

Was ist falsch?

R
43 Beiträge seit 2007
vor 13 Jahren

Meinst du nicht etwa so? (Ich hab hier angenommen, dass ein Artikel ein Feld 'Id' besitzt und nw die Collection Artikel hinter der Property Artikel versteckt)

private void btn_Linq_Click(object sender, EventArgs e)
        {
           NordwindEntity nw = new NordwindEntity(Settings.Default.ConString);

            var test = from p in nw.Artikel
                       where p.Id == 1
                       select p;


            dgv_test.DataSource = test;
        }
O
oehrle Themenstarter:in
461 Beiträge seit 2009
vor 13 Jahren
Jo, das war wohl der Fehler

Nun funktionierts soweit, bekomme nun noch bei jedem Datensatz der angezeigt wird eine Fehlermeldung für die Spallte SSMA_Timestamp. Das mag er wohl nicht, warum? Hat da jemand schone eine Idee? Ich seh mal nach....

5.299 Beiträge seit 2008
vor 13 Jahren

Der frühe Apfel fängt den Wurm.

O
oehrle Themenstarter:in
461 Beiträge seit 2009
vor 13 Jahren
Fehler mit Formatierung der Spalte im DataGridView

DIe Fehlermeldung tritt bei der Abfrage auf, wenn die Datenzeilen in das DataGridView übergeben werden. Bei jedem Datensatz. Und zwar bei dem SSMA_TimeStamp. Da muß er irgend was mit dem Format nicht schlucken. Muss mal noch sehen wie ich den Typ der Spalte ändere, denke daran liegts.



---------------------------
DataGridView Default Error Dialog
---------------------------
The following exception occurred in the DataGridView:



System.ArgumentException: Parameter is not valid.

   at System.Drawing.Image.FromStream(Stream stream, Boolean useEmbeddedColorManagement, Boolean validateImageData)

   at System.Drawing.ImageConverter.ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, Object value)

   at System.Windows.Forms.Formatter.FormatObjectInternal(Object value, Type targetType, TypeConverter sourceConverter, TypeConverter targetConverter, String formatString, IFormatProvider formatInfo, Object formattedNullValue)

   at System.Windows.Forms.Formatter.FormatObject(Object value, Type targetType, TypeConverter sourceConverter, TypeConverter targetConverter, String formatString, IFormatProvider formatInfo, Object formattedNullValue, Object dataSourceNullValue)

   at System.Windows.Forms.DataGridViewCell.GetFormattedValue(Object value, Int32 rowIndex, DataGridViewCellStyle& cellStyle, TypeConverter valueTypeConverter, TypeConverter formattedValueTypeConverter, DataGridViewDataErrorContexts context)



To replace this default dialog please handle the DataError event.
---------------------------
OK   
---------------------------

5.299 Beiträge seit 2008
vor 13 Jahren

ich weiß nicht, was ein SSMA_TimeStamp ist, aber dem Fehler nach zu urteilen lädt er da ein Image aus einem Stream.
Hast du eine Ahnung, wasser da mit einem Image will, und wo der Stream herkommen soll?

edit: ah, ja. Könnte mir vorstellen, dass die VS-IDE SSMA_TimeStamp sowenig kennt wie ich, und daher denkt, das soll wohl ein Image sein, und daher eine ImageColumn eingefügt hat.

Schnellste Lösung: diese Spalte aus dem Grid entfernen. Vmtl. sind die TimeStamp-Informationen für den User eh nutzlos/störend.

Wennde die drin behalten willst, die timestampColumn ersetzen durch eine DataGridviewTextboxColumn, mal gucken, was da angezeigt wird.

Du kannst im SpaltenEditor des DGVs die Spalte selektieren, und als Spaltentyp DataGridviewTextboxColumn anwählen - findeste das?

Der frühe Apfel fängt den Wurm.

F
10.010 Beiträge seit 2004
vor 13 Jahren

@ErfinderDesRades:
Timestamp ist eine SqlServer column die sich automatisch ändert, wenn eine DB Zeile geändert wird.
Ist hervorragend zur Kollisionsanalyse zu gebrauchen.
Ist sogar im CommandBuilder als conflictoption einstellbar.

@oehrle:
Und diese Column wird als byte[] in der DataTable abgelegt, und wie schon gesagt wird die dann vom DGV als Image interpretiert.

O
oehrle Themenstarter:in
461 Beiträge seit 2009
vor 13 Jahren
Konvertierung der DGV-Spalte

Hi FZelle, danke. Damit ich bisher die Ausgabe ohne Fehler anzeigen konnte, habe ich die Spalte einfach ausgeblendet. Nun aber, mein DGV wird dynamisch erzuegt, je nachdem wie ich Tabellen in der Abfrage Joine oder Spalten auswähle. Jetzt hab ich schon rumprobiert, habe auch etwas gefunden. Dann muß ich aber erst die Spalte anlegen, und dann der DGV zuweisen. Nur geht das ja nicht, weil ich die Tabelle je nach Abfrage generiere.Wie mach ich das? Muß ich da ein DataEvent abfangen und dann neu formatieren??

5.299 Beiträge seit 2008
vor 13 Jahren

Bist du dir sicher, dass du deinem User generierte DGVs zumuten willst? Weil die sehen i.A. recht erbärmlich aus, zB. was Spaltenbreiten angeht.
Neben diesen Timestamps gehören auch Schlüsselspalten ausgeblendet.
Beim gestalteten DGV hast du zusätzlich die Möglichkeit, mit ComboboxColumns Relationen auf übergeordnete Tabellen anzuzeigen, und sogar zu editieren.

Aber dahinter steht auch wohl ein anderes View-Konzept: nämlich keine gejointen Abfragen zu verwenden, sondern die benötigten Datensätze in je verschiedene Dataset-Tabellen zu laden, und das Gui so zu bauen, dass man eines gejointen Views ansichtig wird, wenn man es denn wünscht.
Vorteile der Gui-views sind:*weniger Datentraffic *Die Werte sind editier- und rück-speicherbar

Die DGVs in DataBinding-Uebungen sind zwar auch noch grauenhaft gestaltet (zB. zur Nachvollziehbarkeit habich noch die IDs drinne), aber zeigt doch einige Möglichkeiten auf, dieselben Daten unterschiedlich zu viewen.

Der frühe Apfel fängt den Wurm.