C# DataGrid nicht mehr editierbar nach SQL-Abfrage CASE

GustlPC

Lt. Junior Grade
Registriert
Nov. 2008
Beiträge
343
Hi,

ich habe eine SQL Abfrage über SqlDataReader den Reader lade ich in eine DataTable und die DataTable über
Code:
dg.ItemsSource = dt.DefaultView
in ein DataGrid(dg).

Mir geht es explizit um die Option vom Markieren irgendeiner Zelle, also den Inhalt der Zelle.

Bei einer SQL-Abfrage die folgendermaßen beginnt:
Code:
"SELECT t.wert, ...usw..."
funktioniert das auch.
Aber wenn ich den Inhalt der zb. ersten Spalte durch eine CASE Abfrage bestimme, wie folgt:
Code:
"SELECT (CASE WHEN f.wert IS NULL THEN p.wert ELSE f.wert2 END) AS Spaltenname, ...usw..."
funktioniert das leider nicht mehr. Ich kann keinen Zelleninhalt mehr in die Zwischenablage kopieren, komme nicht mal in die Zelle mehr rein...

Ich habe in der doku von DataGrid schon eine Eigenschaft gesucht, aber noch nichts passendes gefunden.

Hat vielleicht einer eine Idee? Wäre super!

Gruß Gustl

Edit: die Eigenschaft IsReadOnly bewirkt hier nicht, auch wenn ich diese nach der Zuweisung zur Laufzeit setze.
 
Zuletzt bearbeitet:
Sind f.wert, f.wert2 und p.wert vom selben Typ? Vielleicht hilf es, wenn du um das Case noch ein Cast/Convert auf den entsprechenden Typen baust.
 
Ich weiß es nicht, aber ich vermute mal, dass die Spalte "Spaltenname" in der DataTable schon Read-Only ist, weil der DataReader sie als berechnete Spalte betrachtet.

Das deckt sich auch mit diesem Thread: Allow edit on datatable loaded from sqldatareader.
Dort wird vorgeschlagen, für die entsprechende Spalte in der DataTable, IsReadOnly manuell auf false zu setzen.
 
Danke für eure Antworten!

Die Spalten sind alle strings. Leider half mir ein convert auch nicht.
Ich habe auch schon ein Subselect probiert: "Select erg.* (...hier die abfrage...) AS erg"
Aber auch ohne Erfolg.

Habe die benannte Spalte, die durch CAST entsteht auf false gesetzt. Und auch das gesamte DataGrid nach der DataTable Zuweisung:

Code:
dg.IsReadOnly = false;
dg.Columns[0].IsReadOnly = false;

Aber auch ohne Erfolg.
Es ist ja leider nicht nur diese Spalte, die nicht editierbar ist, sondern einfach alle.

Gruß
Gustl

Edit: Eine Exception, wie derjenige in dem verlinktem Thread, bekomme ich ja nicht... Sehr komisch wie ich finde o.O

Edit2: Man muss wohl die Spalten in der DataTable auf readonly = false setzen. Dann klappt das auch:
Code:
for (int i = 0; i < dt.Columns.Count; i++)
{
    dt.Columns[i].ReadOnly = false;
}

Also, Fehler behoben. Danke euch.
Gruß
 
Zuletzt bearbeitet:
Zurück
Oben