Laden...

DataGrid Eigenschaften werden erst verspätet übernommen

Erstellt von cSharp_Newbie vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.731 Views
C
cSharp_Newbie Themenstarter:in
7 Beiträge seit 2011
vor 12 Jahren
DataGrid Eigenschaften werden erst verspätet übernommen

Hallo,

ich habe ein Problem mit den DataGrid Eigenschaften meiner WPF Anwendung.
Wenn ich die Eigenschaften des DataGrids mit
z.B.

dataGridTest.Columns[0].Visibility = System.Windows.Visibility.Hidden;
dataGridTest.Columns[1].IsReadOnly = true;
dataGridTest.Columns[2].IsReadOnly = false;

ändern möchte, so werden die Änderungen beim ersten Aufruf nicht ausgeführt.
Erst wenn ich den Tab auf dem das DataGrid ist neu aufrufe wird alles korrekt angezeigt. Hat jemand ne Idee woran dies liegen könnte?

Besten Dank!

3.430 Beiträge seit 2007
vor 12 Jahren

Hallo,

normalerweise müsste sich das schon sofort von alleine aktualisiern.
Was genau hast du da denn gemacht, bzw wo wird der Code aufgerufen.
Und bist du dir überhaupt sicher dass er aufgerufen wurde? => Setze mal einen Breakpoint oder bau ein paar Ausgaben ein

Gruß
Michael

C
cSharp_Newbie Themenstarter:in
7 Beiträge seit 2011
vor 12 Jahren
dataGridTest.Columns[0].Visibility = System.Windows.Visibility.Hidden;
dataGridTest.Columns[1].IsReadOnly = true;
dataGridTest.Columns[2].IsReadOnly = false;

Wenn ich mit dem Debugger darüber gehe erscheint schon in der ersten Zeile eine Fehlermeldung: "Der Index lag außerhalb des Bereiches...."

Hier noch der Code, der davor ausgeführt wird:


sqlstring = "select ...
SqlDataAdapter daTest = new SqlDataAdapter(sqlstring, con);
DataTable dtTest = new DataTable();
daTest.Fill(dtTest);
dataGridTest.ItemsSource = dtTest.DefaultView;

Die Tabelle wird richtig befüllt und korrekt angezeigt. Warum können die Eigenschaften nicht verändert werden?

3.430 Beiträge seit 2007
vor 12 Jahren

Hallo,

wenn du schon in der ersten Zeile einen Array Index Out Of Bounds Exception bekommst dann sind wohl noch keine Spalten definiert an diesem Zeitpunkt.

Gruß
Michael

C
cSharp_Newbie Themenstarter:in
7 Beiträge seit 2011
vor 12 Jahren

Die Bindung an die DataTable erfolgte mit

dataGridTest.ItemsSource = dtTest.DefaultView;

direkt zuvor. Was müsste ich noch tun, damit ich über das DataGrid dann auf die Spalten zugreifen kann?

Wenn ich mit dem Debugger die Eigenschaften abfrage, erscheint mit
dataGridTest.Columns.Count
0

und bei
dataGridTest.Items.Count
8

P
660 Beiträge seit 2008
vor 12 Jahren

Ich denke mal du versuchst die Eigenschaften im FormLoad zu setzen.

Das Problem ist zu diesem Zeitpunkt dass es noch keine Spalten gibt, weil diese nicht dargestellt werden müssen. Erst beim Darstellen werden die Spalten generiert.

Versuch das FormShown-Event stattdessen

MfG
ProGamer*Der Sinn Des Lebens Ist Es, Den Sinn Des Lebens Zu Finden! *"Wenn Unrecht zu Recht wird dann wird Widerstand zur Pflicht." *"Ignorance simplifies ANY problem." *"Stoppt die Piraterie der Musikindustrie"

C
cSharp_Newbie Themenstarter:in
7 Beiträge seit 2011
vor 12 Jahren

Beim Klick auf einen Button wird der Tab angezeigt, die SQL Abfrage durchgeführt, das DataGrid gefüllt und abschließend werden die Eigenschaften gesetzt. Klicke ich erneut auf den Button wird alles richtig angezeigt, nur beim 1. mal nicht. Kann man das automatische Erstellen der Spalten vorher mit einem Befehl auslösen?

C
cSharp_Newbie Themenstarter:in
7 Beiträge seit 2011
vor 12 Jahren

@ProGamer: Danke, wie würde denn die Lösung mit dem FormShown Event aussehen?

P
660 Beiträge seit 2008
vor 12 Jahren

sry mein Fehler. FormShown gibt es nur WinForms Anwendungen.
das Event dass ich meinte heisst Loaded in WPF


public MainWindow()
        {
            InitializeComponent();

            this.Loaded += ( s, e ) =>
                {
                    //MyMethodToChangeColumnSettings
                };
        }

MfG
ProGamer*Der Sinn Des Lebens Ist Es, Den Sinn Des Lebens Zu Finden! *"Wenn Unrecht zu Recht wird dann wird Widerstand zur Pflicht." *"Ignorance simplifies ANY problem." *"Stoppt die Piraterie der Musikindustrie"

C
cSharp_Newbie Themenstarter:in
7 Beiträge seit 2011
vor 12 Jahren

Danke!

Das Problem wurde jetzt mit dem Event AutoGeneratedColumns gelöst.