[C#] SQL decimal(8,2) in datagrid darstellen

antaro

Cadet 3rd Year
Registriert
Sep. 2012
Beiträge
41
Hallo Leute,

ich möchte die Werte einer Spalte aus einer SQL-Tabelle (Typ: decimal (8,2)) in einem
datagrid darstellen.
Leider erscheint zur Laufzeit wenn die Daten ans grid gebunden werden, der
Fehler: Umwandlung nicht möglich.
Gleicher Fehler mit SQL Typ: float

Gibt es eine Spalteneigenschaft im grid, der ich explizit einen anderen Datentyp zuweisen muss ? Das Grid konfiguriere ich manuell-kein Wizard.


Wenn ich die Daten aus meiner Objekt-Eigenschaft (Typ: float?) ins grid einlese, funktioniert alles. Bin noch Newbie.

Danke für eure Antworten.
 
Zuletzt bearbeitet:
Zeig uns mal etwas Code und wo genau der Fehler erscheint.
 
Code:
public class ProzenteCatalog :DataContext
    {
        public ProzenteCatalog()
            : base("Data Source =.\\SQLEXPRESS;" +
                "AttachDbFilename=|DataDirectory|\\Prozente.mdf;" +
                "Integrated Security=True; User Instance=True") { }


        //Tables
        public Table<ProzItems> Prozes;   <--- ORM Liste
    }



   [Table(Name = "ProzTB")]
    public class ProzItems 
    {
        [Column(IsPrimaryKey = true, IsDbGenerated = true)]
        public int ID { get; set; }

        [Column] public int Wert { get; set; }        <-- no Problem aus SQL in grid
        [Column] public float? Wert2 { get; set; }    <-- bei float?  aus SQL - Fehler "Umwandlung  nicht   möglich"
                                                                                  bei int?   - no Problem aus SQL im Grid


    }



Form1

  ProzenteCatalog pc = new ProzenteCatalog();
        BindingSource bs3 = new BindingSource();

	World world;
.
         public List<ProzItems> prozList;

 
.
.
	    bs3.DataSource = pc.Prozes;              <---  SQL to Grid --> Fehler "Umwandlung nicht möglich"
	    //bs3.DataSource = world.prozList;       <---  direkt aus der Liste funktioniert
            dataGridView3.DataSource = bs3;

Vielen Dank für Eure Antwort.
 
Zuletzt bearbeitet:
antaro schrieb:
Vielen Dank für Eure Antwort.

Cool, ich bin also eine Hoheit :D

ersetze
PHP:
bs3.DataSource = pc.Prozes;

durch
PHP:
bs3.DataSource = pc;

dann sollte es funktionieren.

Aber mal ganz ehrlich (nicht böse gemeint), gewöhne dir bitte an in Englisch zu programmieren und Variablen zu bennen ("DataGridView3" -> "pcDataGrid"), ansonsten verlierst du bald den Überblick bei Projekten, die mehr als paar Zeilen Code haben.
 
Bagbag schrieb:
Cool, ich bin also eine Hoheit :D

ersetze
PHP:
bs3.DataSource = pc.Prozes;

durch
PHP:
bs3.DataSource = pc;

dann sollte es funktionieren.



Hallo Bagbag,

ich habe deinen Tipp ausprobiert.
Leider wird bei
PHP:
bs3.DataSource = pc;
der ConnectionString für die Datenbankanbindung ins grid geschrieben. Der Fehler ist dann weg.

mit pc.Prozes; spezifiziere ist die ORM Liste, aus der die Daten kommen.

Das Problem liegt imho darin, dass bei Darstellung des GridInhalts die automatische Konvertierung von SQL:decimal(8,2) nach C# string (not sure) für das Grid nicht möglich ist. Von SQL: int nach DataGrid ist die automatische Konvertierung problemlos möglich. Ebenso von SQL: datetime nach C# Datagrid.


Bagbag schrieb:
Aber mal ganz ehrlich (nicht böse gemeint), gewöhne dir bitte an in Englisch zu programmieren und Variablen zu bennen ("DataGridView3" -> "pcDataGrid"), ansonsten verlierst du bald den Überblick bei Projekten, die mehr als paar Zeilen Code haben.


Sonst schreibe ich auch alles auf Englisch, nur dieses kleine Test-Projekt ist Teil eines größeren Projektes-da habe ich etwas geschlampt. Asche auf mein Haupt.

Gruß
antaro
 
Zuletzt bearbeitet:
Hast du es mal mit double(?) probiert?

Ich weiß nicht, wie die Daten in deine Tabelle bzw. ProzItems kommen. Wenn du Einfluss darauf hast, kannst du es mal einer expliziten Konvertierung/Casting versuchen.
 
Darlis schrieb:
Hast du es mal mit double(?) probiert?

Ich weiß nicht, wie die Daten in deine Tabelle bzw. ProzItems kommen. Wenn du Einfluss darauf hast, kannst du es mal einer expliziten Konvertierung/Casting versuchen.

Problem gelöst!
Dein Tipp mit double? war genau richtig.
PHP:
 public double? Wert2 {get; set;}

UND SQL "Wert2" (FLOAT) ... mit SQL "Wert2" (decimal) funktioniert es nicht.

Besten Dank!
 
Zurück
Oben