Autor Beitrag
Xuxe
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 27



BeitragVerfasst: Di 13.12.11 15:27 
Hi Leute,

ich hab da ein komisches Problem mit einem DataGrid in einem TabControl, und eventuell kan mir da jemand helfen.
Und zwar habe ich wie erwähnt ein DataGrid in einem TabControl, und wenn ich mein Programm starte werden die Daten nicht in das Grid geladen, es werden zwar alle Controls geladen, aber eben keine Inhalte. Wenn ich aber einmal mit der Maus auf den Reiter klicke werden die Daten plötzlich geladen. Das ist aber nur so wenn mein TabControl nur einen Reiter hat, hat es mehrere Reiter wird alles normal zu Programmstart geladen (Ich habe eine kleine abfrage bevor das Fenster mit dem TabControl geladen wird, und je nach Auswahl kann das TabControl 1-5 Reiter besitzen).

Ich vermute das mein "Window_Loaded" event erst ausgeführt wird wenn ich auf den Reiter klicke, aber was kann man da machen? Bzw. vermute ich richtig? Kann mir da wer einen Hinweis geben?

Vielen Dank schon mal,

Boris
moori64
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 76



BeitragVerfasst: Di 13.12.11 21:00 
Hallo Boris,

wenn du möchtest das deine Daten schon vorher geladen werden dann muss du sie gleich unter private form_load packen.

momentan musst du irgend ein ereignis auslösen , schau mal bitte in welchen geschweiften klammern das mit den dgv drin steht.

gruß uwe
Trashkid2000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: Di 13.12.11 21:28 
Hallo,
also das mit den Events "Window_Loaded" und so weiter... Sehe das immer wieder.

Aber wie wäre es denn, wenn Du einfach mal das Laden der Daten in den Konstruktor packst?
Und zwar unter dem Aufruf der Methode "InitializeComponents".

Dann kannst Du Dir auf jeden Fall sicher sein, dass Dein Code beim Konstruieren der Form aufgerufen wird...
Xuxe Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 27



BeitragVerfasst: Mi 14.12.11 12:00 
Hallo und erstmal vielen Dank für die Hilfe!

@moori64:
Ich weis grad nicht so recht was du mit private form_load meinst, ist das nicht "private void Window_Loaded" unter Winforms?
Die anweisungen für das DataGrid stehen alle im Window_Loaded event, oder wie meinst du das?

@Trashkid2000:
Das mit dem Konstruktor hatte ich schon ausprobiert, aber der Effekt ist leider der gleiche.

Irgendwie ist es schon komisch, wenn ich alle Tabs des TabControls lade funktioniert alles, nur wenn ich weniger Tabs lade tritt das Problem auf.
Ich hab da noch ne Idee, die werd ich mal ausprobieren, mal schaun ob es klappt.
moori64
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 76



BeitragVerfasst: Mi 14.12.11 12:16 
Hallo Boris ,

was ich damit meine ist das wenn ich möchte das etwas beim aufrufen einer Form gleich geladen wird dann packe ich das unter den Befehl
ausblenden C#-Quelltext
1:
2:
3:
4:
private void Form1_Load(object sender, EventArgs e)
{
  // und hier steht dann dein inhalt drin. 
}

damit ist sichergestellt das alles sofort beim start der form ausgeführt wird. offensichtlich hast du in der abfrage irgendetwas gemacht
was ausserhalb diese anweisung ist.

Viele Grüße

UWe

Moderiert von user profile iconTh69: C#-Tags hinzugefügt
Xuxe Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 27



BeitragVerfasst: Mi 14.12.11 12:28 
Ok, dann habe ich dich doch richtig verstanden. Aber bei mir steht alles in dem Window_Loaded event, deswegen bin ich ja so verwundert :-)
moori64
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 76



BeitragVerfasst: Mi 14.12.11 20:46 
hast du nicht geschrieben das du eine kleine abfrage drin hast bevor es losgeht , debugge das doch mal durch dann siehst du doch wo er hingeht.
Xuxe Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 27



BeitragVerfasst: Do 15.12.11 11:35 
Zitat:
hast du nicht geschrieben das du eine kleine abfrage drin hast bevor es losgeht , debugge das doch mal durch dann siehst du doch wo er hingeht.


??? ich weis doch welche Anweisungen ausgeführt werden und welche nicht. Es werden ja auch alle Anweisungen korrekt ausgeführt, nur eben nicht beim Window_Loaded (so wie es sein sollte, weil die anweisungen alle in diesem Event stehen), sondern erst wenn ich mit der Maus auf den Reiter klicke für den die Anweisungen gedacht sind...

Mir scheint ich sollte vieleicht nochmal erklären was mein Problem ist:

-Ich habe ein TabControl mit bis zu 5 Reitern.
-Je nach vorheriger Abfrage, werden 1-5 Reiter angezeigt, der Rest mit TabItem.Visibility = Visibility.Hidden ausgeblendet.
-Wenn weniger als 5 Reiter angezeigt werden, werden die Anweisungen des Window_Loaded events erst ausgeführt wenn ich auf den entsprechenden Reiter geklickt habe. Aber wirklich nur wenn weniger als 5 Reiter angezeigt werden, werden alle angezeigt, funktioniert das Window_Loaded event ganz normal.

Beispielhaft:

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
 private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            switch (filter)
            {
                case "bedingung":
                    {
                        LadeDatenAusDB();                        
                        BerechneIrgendwas();
                        MachIrgendwas();
                    }
                    break;
                case "bedingung1":
                    {
                        LadeDatenAusDB();                        
                        BerechneIrgendwas();
                        MachIrgendwas();
                        Tabitem.Visibility = Visibility.Hidden;
                        Tabitem2.Visibility = Visibility.Hidden;
                        Tabitem3.Visibility = Visibility.Hidden;
                    }
                    break;
                case "bedingung2":
                    {
                        LadeDatenAusDB();                        
                        BerechneIrgendwas();
                        MachIrgendwas();
                        Tabitem.Visibility = Visibility.Hidden;
                        Tabitem1.Visibility = Visibility.Hidden;
                        Tabitem2.Visibility = Visibility.Hidden;
                    }
                    break;            
            }
moori64
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 76



BeitragVerfasst: Do 15.12.11 13:54 
Hallo,
aus einer anderen programmiersprache kenne ich die case anweisung nur mit den zusatz when.
und dort fragt man dann immer felder ab nie bedingungen. ich weis aber was du machen willst , vielleicht solltest du die tabcontrols nicht ausblenden sondern nur deaktiveren
die schrift ausgrauen. schade das ich dir nicht weiter helfen kann .
ich steck hier noch nicht so tief in der Materie drin , habe selbst ein Problem mit Filtern eines Datagrids über ein Combobox und komme da einfach nicht weiter.

viele grüße uwe
Xuxe Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 27



BeitragVerfasst: Do 15.12.11 16:42 
Ja gut, ist in dem Fall eigentlich egal ob man switch oder if else Konstrukte benutzt. Hier benutze ich switch nur wegen der meiner Meinung nach besseren Lesbarkeit, man kann das auch mit if else machen. Bei vielen Bedingen kann es aber einen Performance Unterschied geben, da der Comnpiler so weit ich weis bei Switch dann eine Sprungtabelle anlegt, was er bei if else nicht machen kann.

Was genau funktioniert denn nicht? Haste schon nen Thread offen?

Zum Thema: Ich weis nicht ob das so im Sinne des Erfinders ist, aber mit "TabItem.Focus();" am ende der Anweisungen funktioniert es. Ich versteh zwar nicht ganz warum, aber das soll mich nicht aufhalten. Falls mir jemand erklären kann woran das liegt, ich habe für solche Dinge immer ein offenes Ohr :-)

Danke!
moori64
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 76



BeitragVerfasst: Do 15.12.11 19:19 
ich habe dir mal ein pn geschickt.
Wie werden die Daten am besten eingeschränkt ?
moori64
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 76



BeitragVerfasst: Do 15.12.11 21:04 
Hallo Boris.

hast du die private nachricht erhalten, hast du da eine idee ?


viele grüße uwe