Hi guys,
I am currently working on a way to display data, that is structured on 3 levels.
On first level is a week, on second level a day, and on the third level a basic entry.
Based on that system I thought about the RadGridView and the Child-Relations.
My main problems now are, that I have especially on the third level way too less space in the child-table so its basically unreadable.
Is there any way to give the childtables more space?
The other problem is, that I haven't found out, how I could set different Templates for the childtables.
The HierarchyChildTemplate only works for one Child as it seems.
The reason why I not just Group by the Days and weeks is, that I later want to use Drag and Drop entries between the days.
I thought this would be more possible in a hierarchical system.
I also tested the RadPanelBar, but there I would need to create somethin like a table with frozen headers and so on manually.
Greetings,
Benedikt
5 Answers, 1 is accepted
Hi Benedikt,
You can set properties on the child grids (such as paddings and margins to reduce the used space) by either handling the DataLoading event or specifying a HierarchyChildTemplate as explained in this article. You can have one template for the 2nd-level grids and in that template specify another template that will be applied for the 3rd level grids.
Please let me know if this works for you or if you need any assistance with the exact implementation at your end.
Regards,
Dilyan Traykov
Progress Telerik
Virtual Classroom, the free self-paced technical training that gets you up to speed with Telerik and Kendo UI products quickly just got a fresh new look + new and improved content including a brand new Blazor course! Check it out at https://learn.telerik.com/.
Hi Dilyan,
works as you wrote, haven't thought of creating a Childteamplate in my Childtemplate.
But now I encounter new problems.
I will try a few things out now. Maybe I'll come back withe new problems later. :D
Hi Benedikt,
I'm glad to hear that you found my suggestion helpful. Do let me know if I can help you in resolving the issues you come across.
Regards,
Dilyan Traykov
Progress Telerik
Virtual Classroom, the free self-paced technical training that gets you up to speed with Telerik and Kendo UI products quickly just got a fresh new look + new and improved content including a brand new Blazor course! Check it out at https://learn.telerik.com/.
Hi Dilyan,
thanks for the offer.
So my main problem is the low performance as soon as I expand the second level.
It takes enormous time to expand and after expansion scrolling is also performing very low.
I understand that it's slow if I don't set a height to the child grids, but even set heights aren't much better.
I know from other projects I made, that published it was better, here it isn't.
I have the GridViewCellCoreStyle active in the resources, also not getting much performance.
I don't set the Core Row-Style cause I want the Row-Indicator.
I do also know, that if I use fixed column-widths it gets faster, so I trried to implementa PersistenceManager to let the user save and load his settings. But I am not able to save it for the childgrids.
Maybe, because each expansion creats a new grid, so it's not even possible?
Also if I scroll in the child, the column-header should stay visible, but it gets scolled out of visible range.
I guess my main problem os the table on the third level. Even in a solo grid with only that data the load takes much longer then I'm used to from other projects. And I don't get why...
The data is already loaded, everything in the code is done, but the rendering in the UI takes 2 seconds. I know not that big, but it just feels bad and I can't show a busy-indicator because only the UI works.
Is there something I'm doing wrong I oversee?
<telerik:RadGridView x:Name="rgvLoseLoseSpezialsicht" Grid.Column="1" GroupRenderMode="Flat" ShowGroupPanel="False" ShowSearchPanel="False" CanUserSearch="False" IsSynchronizedWithCurrentItem="True" AutoGenerateColumns="False" IsReadOnly="True" ItemsSource="{Binding Lose}" SelectionMode="Extended" AlternationCount="2" > <telerik:RadGridView.Columns> <telerik:GridViewDataColumn DataMemberBinding="{Binding KritischerAuftrag}" Header="Kritischer Auftrag" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding VertriebsBereich}" Header="Vertriebs-Bereich" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding Jahr}" Header="Jahr" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding LfdNr}" Header="LfdNr" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding TA}" Header="TA" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding Gebiet}" Header="Gebiet" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding ObjektAnschrift}" Header="Anschrift" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding ObjektOrt}" Header="Ort" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding Los}" Header="Los" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding Mappe}" Header="Mappe" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding ProduktTyp}" Header="Produkt-Typ" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding AE, StringFormat=dd.MM}" Header="AE" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding AMInAV, StringFormat=dd.MM}" Header="AM in AV" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding AMBearbeitet, StringFormat=dd.MM}" Header="AM bearbeitet" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding ABFertig, StringFormat=dd.MM}" Header="AB Fertig" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding MappeFertigAV, StringFormat=dd.MM}" Header="Mappe fertig AV" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding MappeImWerk, StringFormat=dd.MM}" Header="Mappe im Werk" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding Gegenbestätigung}" Header="Gegenbestätigung" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding Vorfertigungstermin, StringFormat=dd.MM.yy}" Header="Vorfertigungstermin" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding LetzterLiefertermin, StringFormat=dd.MM.yy}" Header="Letzter Liefertermin" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding Endtermin, StringFormat=dd.MM.yy}" Header="Endtermin" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding Ladetag, StringFormat=dd.MM.yy}" Header="Ladetag" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding AbholtagSoll, StringFormat=dd.MM.yy}" Header="Abholtag Soll" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding KundenwunschKWJahr}" Header="Kundenwunsch KW/Jahr" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding FertigmeldDat, StringFormat=dd.MM.yy}" Header="Fertigmelde Datum" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding Profilfarbe}" Header="Profilfarbe" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding Zellen, StringFormat=N0}" Header="Zellen" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding ME, StringFormat=N0}" Header="ME" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding Fertigungswert, StringFormat=N0}" Header="Fertigungswert" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding MontageGroßobjekt}" Header="Montage Großobjekt" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding OhneMontage}" Header="Ohne Montage" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding Projektierer}" Header="Projektierer" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding PrioritätAV}" Header="Priorität AV" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding BearbeiterAV}" Header="Bearbeiter AV" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding KEMx}" Header="KEMx" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding KommentarVorhanden}" Header="Kommentar" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding AvisierungVorhanden}" Header="Avisierung" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding ProdukteAuftrag}" Header="Produkte Auftrag" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding Direktanlieferung}" Header="Direktanlieferung" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding TrennwändeAnlagenmerkmal}" Header="Trennwände Anlagenmerkmal" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding TrennwändeProfilausbildung}" Header="Trennwände Profilausbildung" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding Einzelteile, StringFormat=N0}" Header="Möbel Einzelteile" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding MöbelSchwierigkeit}" Header="Möbel Schwierigkeit" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding MöbelProduktausprägung}" Header="Möbel Produktausprägung" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding WEinfach, StringFormat=N0}" Header="W einfach" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding WTHPL, StringFormat=N0}" Header="WT - HPL" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding BZPL, StringFormat=N0}" Header="BZPL" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding MöbelRegale, StringFormat=N0}" Header="Möbel/Regale" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding BeckenBecher, StringFormat=N0}" Header="Becken/Becher" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding Spiegelfräsungen, StringFormat=N0}" Header="Spiegelfräsungen" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding BüromöbelSpan, StringFormat=N0}" Header="Büromöbel Span" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding AluBlechteile, StringFormat=N0}" Header="Alu-/Blechteile" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding BüromöbelSpan, StringFormat=N0}" Header="Büromöbel Span" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding AufwandEM, StringFormat=N0}" Header="Aufwand EM in h" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding AufwandBAZ, StringFormat=N0}" Header="Aufwand BAZ in h" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding BAZBeckenBecher, StringFormat=N0}" Header="BAZ, Becken/Becher" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding EMBeckenBecher, StringFormat=N0}" Header="EM, Becken/Becher" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding BAZSpiegelfräsungen, StringFormat=N0}" Header="BAZ, Spiegelfräsungen" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding EMSpiegelfräsungen, StringFormat=N0}" Header="EM, Spiegelfräsungen" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding SchränkeRSTüren, StringFormat=N0}" Header="Schränke R/S Türen" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding SchränkeRSTürMaterial}" Header="Schränke R/S Tür-Material" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding SchränkeRSFE, StringFormat=N0}" Header="Schränke R/S FE" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding Korpusse3er, StringFormat=N0}" Header="Korpusse 3er" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding SchränkeRSArt3er}" Header="3er Art" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding Korpusse2er, StringFormat=N0}" Header="Korpusse 2er" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding SchränkeRSArt2er}" Header="2er Art" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding Korpusse1er, StringFormat=N0}" Header="Korpusse 1er" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding SchränkeRSArt1er}" Header="1er Art" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding SchränkeIXOSTüren, StringFormat=N0}" Header="Schränke IXOS Türen" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding SchränkeIXOSTürMaterial}" Header="Schränke IXOS Tür-Material" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding SchränkeIXOSFE, StringFormat=N0}" Header="Schränke IXOS FE" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding einteiligeSchränke, StringFormat=N0}" Header="einteilige Schränke" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding mehrteiligeSchränke, StringFormat=N0}" Header="mehrteilige Schränke" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding Sonderschränke, StringFormat=N0}" Header="Sonderschränke" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding BänkeFE, StringFormat=N0}" Header="Bänke FE" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding Bohlen}" Header="Bohlen" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding Modell3000, StringFormat=N0}" Header="Modell 3000" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding Modell3010, StringFormat=N0}" Header="Modell 3010" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding Modell3100, StringFormat=N0}" Header="Modell 3100" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding Modell3500, StringFormat=N0}" Header="Modell 3500" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding Modell3600, StringFormat=N0}" Header="Modell 3600" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding Modell3700, StringFormat=N0}" Header="Modell 3700" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding Modell3800, StringFormat=N0}" Header="Modell 3800" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding Modell5100, StringFormat=N0}" Header="Modell 5100" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding Modell5200, StringFormat=N0}" Header="Modell 5200" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding Hakenl1010, StringFormat=N0}" Header="Hakenl. 1010" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding KSBkl1100, StringFormat=N0}" Header="KSB < 1100" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding KSBgr1100, StringFormat=N0}" Header="KSB > 1100" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding UBZoOBZ, StringFormat=N0}" Header="UBZ/OBZ" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding vorgebaute, StringFormat=N0}" Header="vorgebaute" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding Formteile, StringFormat=N0}" Header="Formteile" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding HakenleistenGesamt, StringFormat=N0}" Header="Hakenleisten Gesamt" HeaderTextWrapping="Wrap" TextWrapping="Wrap" /> </telerik:RadGridView.Columns></telerik:RadGridView>
public class clsLosSpezialsicht : clsBaseViewModel{ #region Properties public int JahrKW { get; set; } public int ID { get; set; } public int AuftragsID { get; set; } public int Jahr { get; set; } public int LfdNr { get; set; } public int TA { get; set; } public int? Gebiet { get; set; } public string ObjektAnschrift { get; set; } public string ObjektPLZ { get; set; } public string ObjektOrt { get; set; } public string ObjektStraße { get; set; } public string ObjektLand { get; set; } public int? Los { get; set; } public int? Mappe { get; set; } public int ProduktTypID { get; set; } public string ProduktTyp { get; set; } public int ProduktGruppenID { get; set; } public bool ProduktGruppeAktiv { get; set; } public int ProduktGruppenArtID { get; set; } public DateTime? AE { get; set; } public DateTime? AMInAV { get; set; } public DateTime? AMBearbeitet { get; set; } public DateTime? ABFertig { get; set; } public DateTime? MappeFertigAV { get; set; } public DateTime? MappeImWerk { get; set; } public bool Gegenbestätigung { get; set; } public DateTime? Vorfertigungstermin { get; set; } public DateTime? Endtermin { get; set; } public DateTime? Ladetag { get; set; } public int? KundenwunschKW { get; set; } public int? KundenwunschJahr { get; set; } public string KundenwunschKWJahr { get { if (KundenwunschJahr.HasValue | KundenwunschKW.HasValue) { return KundenwunschKW.ToString() + "/" + KundenwunschJahr.ToString(); } return null; } } public int? ProfilfarbeID { get; set; } public int? ProfilfarbeFarbnummer { get; set; } public string ProfilfarbeFarbname { get; set; } public string Profilfarbe { get { if (ProfilfarbeID.HasValue) { return ProfilfarbeFarbnummer.ToString() + " " + ProfilfarbeFarbname.ToString(); } return null; } } public decimal Zellen { get; set; } public decimal ME { get; set; } public decimal Fertigungswert { get; set; } public bool MontageGroßobjekt { get; set; } public bool OhneMontage { get; set; } public int? ProjektiererID { get; set; } public string ProjektiererNachname { get; set; } public string ProjektiererVorname { get; set; } public string Projektierer { get { if (ProjektiererNachname != null && ProjektiererVorname != null) { return ProjektiererNachname.ToString() + ", " + ProjektiererVorname.ToString(); } return null; } } public int? PrioritätAV { get; set; } public int? BearbeiterAVID { get; set; } public string BearbeiterAVNachname { get; set; } public string BearbeiterAVVorname { get; set; } public string BearbeiterAV { get { if (BearbeiterAVID.HasValue) { return BearbeiterAVNachname.ToString() + ", " + BearbeiterAVVorname.ToString(); } return null; } } public bool KEMx { get; set; } public bool KommentarVorhandenLos { get; set; } public bool KommentarVorhandenAuftrag { get; set; } public bool KommentarVorhanden { get { if (KommentarVorhandenLos | KommentarVorhandenAuftrag) { return true; } return false; } } public bool AvisierungVorhanden { get; set; } public string ProdukteAuftrag { get; set; } public bool Direktanlieferung { get; set; } public int? TrennwändeAnlagenmerkmalID { get; set; } public string TrennwändeAnlagenmerkmal { get; set; } public int? TrennwändeProfilausbildungID { get; set; } public string TrennwändeProfilausbildung { get; set; } public decimal Einzelteile { get; set; } public int? MöbelSchwierigkeitID { get; set; } public int? MöbelSchwierigkeit { get; set; } public int? MöbelProduktausprägungID { get; set; } public string MöbelProduktausprägung { get; set; } public decimal WEinfach { get; set; } public decimal WTHPL { get; set; } public decimal BZPL { get; set; } public decimal MöbelRegale { get; set; } public decimal BeckenBecher { get; set; } public decimal Spiegelfräsungen { get; set; } public decimal BüromöbelSpan { get; set; } public decimal AluBlechteile { get; set; } public decimal AufwandEM { get; set; } public decimal AufwandBAZ { get; set; } public decimal BAZBeckenBecher { get; set; } public decimal EMBeckenBecher { get; set; } public decimal BAZSpiegelfräsungen { get; set; } public decimal EMSpiegelfräsungen { get; set; } public decimal SchränkeRSTüren { get; set; } public decimal Korpusse3er { get; set; } public int? SchränkeRSArtID3er { get; set; } public string SchränkeRSArt3er { get; set; } public decimal Korpusse2er { get; set; } public int? SchränkeRSArtID2er { get; set; } public string SchränkeRSArt2er { get; set; } public decimal Korpusse1er { get; set; } public int? SchränkeRSArtID1er { get; set; } public string SchränkeRSArt1er { get; set; } public decimal SchränkeRSFE { get; set; } public int? SchränkeRSTürMaterialID { get; set; } public string SchränkeRSTürMaterial { get; set; } public decimal einteiligeSchränke { get; set; } public decimal mehrteiligeSchränke { get; set; } public decimal Sonderschränke { get; set; } public decimal SchränkeIXOSTüren { get; set; } public decimal SchränkeIXOSFE { get; set; } public int? SchränkeIXOSTürMaterialID { get; set; } public string SchränkeIXOSTürMaterial { get; set; } public bool Bohlen { get; set; } public decimal Modell3000 { get; set; } public decimal Modell3010 { get; set; } public decimal Modell3100 { get; set; } public decimal Modell3500 { get; set; } public decimal Modell3600 { get; set; } public decimal Modell3700 { get; set; } public decimal Modell3800 { get; set; } public decimal Modell5100 { get; set; } public decimal Modell5200 { get; set; } public decimal Hakenl1010 { get; set; } public decimal KSBkl1100 { get; set; } public decimal KSBgr1100 { get; set; } public decimal UBZoOBZ { get; set; } public decimal vorgebaute { get; set; } public decimal Formteile { get; set; } public decimal BänkeFE { get; set; } public decimal HakenleistenGesamt { get; set; } public DateTime? LetzterLieferterminBestellungenEintrag { get; set; } public DateTime? ManuellerLiefertermin { get; set; } public DateTime? LetzterLieferterminBestellungen { get; set; } public DateTime? LetzterLiefertermin { get { if (ManuellerLiefertermin.HasValue) { if (LetzterLieferterminBestellungenEintrag.HasValue) { if (ManuellerLiefertermin > LetzterLieferterminBestellungenEintrag) { return ManuellerLiefertermin; } else { return LetzterLieferterminBestellungenEintrag; } } else { return ManuellerLiefertermin; } } else { return LetzterLieferterminBestellungenEintrag; } } } public DateTime? FertigmeldDat { get; set; } public DateTime? AbholtagSoll { get; set; } public bool KritischerAuftrag { get; set; } public int VertriebsBereichID { get; set; } public string VertriebsBereich { get; set; } #endregion #region Constructor public clsLosSpezialsicht(DataRow dr) { JahrKW = (int)dr["JahrKW"]; ID = (int)dr["ID"]; AuftragsID = (int)dr["AuftragsID"]; Jahr = (int)dr["Jahr"]; LfdNr = (int)dr["LfdNr"]; TA = (int)dr["TA"]; Gebiet = dr["Gebiet"] == DBNull.Value ? null : (int?)dr["Gebiet"]; ObjektAnschrift = dr["ObjektAnschrift"] == DBNull.Value ? null : (string)dr["ObjektAnschrift"]; ObjektPLZ = dr["ObjektPLZ"] == DBNull.Value ? null : (string)dr["ObjektPLZ"]; ObjektOrt = dr["ObjektOrt"] == DBNull.Value ? null : (string)dr["ObjektOrt"]; ObjektStraße = dr["ObjektStraße"] == DBNull.Value ? null : (string)dr["ObjektStraße"]; ObjektLand = dr["ObjektLand"] == DBNull.Value ? null : (string)dr["ObjektLand"]; Los = dr["Los"] == DBNull.Value ? null : (int?)dr["Los"]; Mappe = dr["Mappe"] == DBNull.Value ? null : (int?)dr["Mappe"]; ProduktTypID = (int)dr["ProduktTypID"]; ProduktTyp = (string)dr["ProduktTyp"]; ProduktGruppenID = (int)dr["ProduktGruppenID"]; ProduktGruppeAktiv = (bool)dr["ProduktGruppeAktiv"]; ProduktGruppenArtID = (int)dr["ProduktGruppenArtID"]; AE = dr["AE"] == DBNull.Value ? null : (DateTime?)dr["AE"]; AMInAV = dr["AMInAV"] == DBNull.Value ? null : (DateTime?)dr["AMInAV"]; AMBearbeitet = dr["AMBearbeitet"] == DBNull.Value ? null : (DateTime?)dr["AMBearbeitet"]; ABFertig = dr["ABFertig"] == DBNull.Value ? null : (DateTime?)dr["ABFertig"]; MappeFertigAV = dr["MappeFertigAV"] == DBNull.Value ? null : (DateTime?)dr["MappeFertigAV"]; MappeImWerk = dr["MappeImWerk"] == DBNull.Value ? null : (DateTime?)dr["MappeImWerk"]; Gegenbestätigung = (bool)dr["Gegenbestätigung"]; Vorfertigungstermin = dr["Vorfertigungstermin"] == DBNull.Value ? null : (DateTime?)dr["Vorfertigungstermin"]; Endtermin = dr["Endtermin"] == DBNull.Value ? null : (DateTime?)dr["Endtermin"]; Ladetag = dr["Ladetag"] == DBNull.Value ? null : (DateTime?)dr["Ladetag"]; KundenwunschKW = dr["KundenwunschKW"] == DBNull.Value ? null : (int?)dr["KundenwunschKW"]; KundenwunschJahr = dr["KundenwunschJahr"] == DBNull.Value ? null : (int?)dr["KundenwunschJahr"]; ProfilfarbeID = dr["ProfilfarbeID"] == DBNull.Value ? null : (int?)dr["ProfilfarbeID"]; ProfilfarbeFarbnummer = dr["ProfilfarbeFarbnummer"] == DBNull.Value ? null : (int?)dr["ProfilfarbeFarbnummer"]; ProfilfarbeFarbname = dr["ProfilfarbeFarbname"] == DBNull.Value ? null : (string)dr["ProfilfarbeFarbname"]; Zellen = (decimal)dr["Zellen"]; ME = (decimal)dr["ME"]; Fertigungswert = (decimal)dr["Fertigungswert"]; MontageGroßobjekt = (bool)dr["MontageGroßobjekt"]; OhneMontage = (bool)dr["OhneMontage"]; ProjektiererID = dr["ProjektiererID"] == DBNull.Value ? null : (int?)dr["ProjektiererID"]; ProjektiererNachname = dr["ProjektiererNachname"] == DBNull.Value ? null : (string)dr["ProjektiererNachname"]; ProjektiererVorname = dr["ProjektiererVorname"] == DBNull.Value ? null : (string)dr["ProjektiererVorname"]; PrioritätAV = dr["PrioritätAV"] == DBNull.Value ? null : (int?)dr["PrioritätAV"]; BearbeiterAVID = dr["BearbeiterAVID"] == DBNull.Value ? null : (int?)dr["BearbeiterAVID"]; BearbeiterAVNachname = dr["BearbeiterAVNachname"] == DBNull.Value ? null : (string)dr["BearbeiterAVNachname"]; BearbeiterAVVorname = dr["BearbeiterAVVorname"] == DBNull.Value ? null : (string)dr["BearbeiterAVVorname"]; KEMx = (bool)dr["KEMx"]; KommentarVorhandenLos = (bool)dr["KommentarVorhandenLos"]; KommentarVorhandenAuftrag = (bool)dr["KommentarVorhandenAuftrag"]; AvisierungVorhanden = (bool)dr["AvisierungVorhanden"]; ProdukteAuftrag = dr["ProdukteAuftrag"] == DBNull.Value ? null : (string)dr["ProdukteAuftrag"]; Direktanlieferung = (bool)dr["Direktanlieferung"]; #region Trennwände if (ProduktGruppenArtID == 1) { TrennwändeAnlagenmerkmalID = (int?)dr["TrennwändeAnlagenmerkmalID"]; TrennwändeAnlagenmerkmal = (string)dr["TrennwändeAnlagenmerkmal"]; TrennwändeProfilausbildungID = (int?)dr["TrennwändeProfilausbildungID"]; TrennwändeProfilausbildung = (string)dr["TrennwändeProfilausbildung"]; } #endregion #region Möbel else if (ProduktGruppenArtID == 2) { WEinfach = Convert.ToDecimal(dr["WEinfach"]); WTHPL = Convert.ToDecimal(dr["WTHPL"]); BZPL = Convert.ToDecimal(dr["BZPL"]); MöbelRegale = Convert.ToDecimal(dr["MöbelRegale"]); BeckenBecher = Convert.ToDecimal(dr["BeckenBecher"]); Spiegelfräsungen = Convert.ToDecimal(dr["Spiegelfräsungen"]); BüromöbelSpan = Convert.ToDecimal(dr["BüromöbelSpan"]); AluBlechteile = Convert.ToDecimal(dr["AluBlechteile"]); Einzelteile = Convert.ToDecimal(dr["Einzelteile"]); MöbelSchwierigkeitID = dr["MöbelSchwierigkeitID"] == DBNull.Value ? null : (int?)dr["MöbelSchwierigkeitID"]; MöbelSchwierigkeit = dr["MöbelSchwierigkeit"] == DBNull.Value ? null : (int?)dr["MöbelSchwierigkeit"]; MöbelProduktausprägungID = dr["MöbelProduktausprägungID"] == DBNull.Value ? null : (int?)dr["MöbelProduktausprägungID"]; MöbelProduktausprägung = dr["MöbelProduktausprägung"] == DBNull.Value ? null : (string)dr["MöbelProduktausprägung"]; AufwandEM = Convert.ToDecimal(dr["AufwandEM"]); AufwandBAZ = Convert.ToDecimal(dr["AufwandBAZ"]); BAZBeckenBecher = Convert.ToDecimal(dr["BAZBeckenBecher"]); EMBeckenBecher = Convert.ToDecimal(dr["EMBeckenBecher"]); BAZSpiegelfräsungen = Convert.ToDecimal(dr["BAZSpiegelfräsungen"]); EMSpiegelfräsungen = Convert.ToDecimal(dr["EMSpiegelfräsungen"]); } #endregion #region SchränkeRS else if (ProduktGruppenArtID == 3) { Korpusse3er = Convert.ToDecimal(dr["Korpusse3er"]); Korpusse2er = Convert.ToDecimal(dr["Korpusse2er"]); Korpusse1er = Convert.ToDecimal(dr["Korpusse1er"]); SchränkeRSArtID3er = dr["SchränkeRSArtID3er"] == DBNull.Value ? null : (int?)dr["SchränkeRSArtID3er"]; SchränkeRSArt3er = dr["SchränkeRSArt3er"] == DBNull.Value ? null : (string)dr["SchränkeRSArt3er"]; SchränkeRSArtID2er = dr["SchränkeRSArtID2er"] == DBNull.Value ? null : (int?)dr["SchränkeRSArtID2er"]; SchränkeRSArt2er = dr["SchränkeRSArt2er"] == DBNull.Value ? null : (string)dr["SchränkeRSArt2er"]; SchränkeRSArtID1er = dr["SchränkeRSArtID1er"] == DBNull.Value ? null : (int?)dr["SchränkeRSArtID1er"]; SchränkeRSArt1er = dr["SchränkeRSArt1er"] == DBNull.Value ? null : (string)dr["SchränkeRSArt1er"]; SchränkeRSFE = Convert.ToDecimal(dr["SchränkeRSFE"]); SchränkeRSTüren = Convert.ToDecimal(dr["SchränkeRSTüren"]); SchränkeRSTürMaterialID = dr["SchränkeRSTürMaterialID"] == DBNull.Value ? null : (int?)dr["SchränkeRSTürMaterialID"]; SchränkeRSTürMaterial = dr["SchränkeRSTürMaterial"] == DBNull.Value ? null : (string)dr["SchränkeRSTürMaterial"]; } #endregion #region SchränkeIXOS else if (ProduktGruppenArtID == 4) { einteiligeSchränke = Convert.ToDecimal(dr["einteiligeSchränke"]); mehrteiligeSchränke = Convert.ToDecimal(dr["mehrteiligeSchränke"]); Sonderschränke = Convert.ToDecimal(dr["Sonderschränke"]); SchränkeIXOSFE = Convert.ToDecimal(dr["SchränkeIXOSFE"]); SchränkeIXOSTüren = Convert.ToDecimal(dr["SchränkeIXOSTüren"]); SchränkeIXOSTürMaterialID = dr["SchränkeIXOSTürMaterialID"] == DBNull.Value ? null : (int?)dr["SchränkeIXOSTürMaterialID"]; SchränkeIXOSTürMaterial = dr["SchränkeIXOSTürMaterial"] == DBNull.Value ? null : (string)dr["SchränkeIXOSTürMaterial"]; } #endregion #region Bänke else if (ProduktGruppenArtID == 5) { Modell3000 = Convert.ToDecimal(dr["Modell3000"]); Modell3010 = Convert.ToDecimal(dr["Modell3010"]); Modell3100 = Convert.ToDecimal(dr["Modell3100"]); Modell3500 = Convert.ToDecimal(dr["Modell3500"]); Modell3600 = Convert.ToDecimal(dr["Modell3600"]); Modell3700 = Convert.ToDecimal(dr["Modell3700"]); Modell5100 = Convert.ToDecimal(dr["Modell5100"]); Hakenl1010 = Convert.ToDecimal(dr["Hakenl1010"]); KSBgr1100 = Convert.ToDecimal(dr["KSBgr1100"]); KSBkl1100 = Convert.ToDecimal(dr["KSBkl1100"]); vorgebaute = Convert.ToDecimal(dr["vorgebaute"]); Formteile = Convert.ToDecimal(dr["Formteile"]); Bohlen = (bool)dr["Bohlen"]; UBZoOBZ = Convert.ToDecimal(dr["UBZoOBZ"]); Modell3800 = Convert.ToDecimal(dr["Modell3800"]); Modell5200 = Convert.ToDecimal(dr["Modell5200"]); BänkeFE = Convert.ToDecimal(dr["BänkeFE"]); HakenleistenGesamt = Convert.ToDecimal(dr["HakenleistenGesamt"]); } #endregion LetzterLieferterminBestellungenEintrag = dr["LetzterLieferterminBestellungenEintrag"] == DBNull.Value ? null : (DateTime?)dr["LetzterLieferterminBestellungenEintrag"]; ManuellerLiefertermin = dr["ManuellerLiefertermin"] == DBNull.Value ? null : (DateTime?)dr["ManuellerLiefertermin"]; LetzterLieferterminBestellungen = dr["LetzterLieferterminBestellungen"] == DBNull.Value ? null : (DateTime?)dr["LetzterLieferterminBestellungen"]; FertigmeldDat = dr["FertigmeldDat"] == DBNull.Value ? null : (DateTime?)dr["FertigmeldDat"]; AbholtagSoll = dr["AbholtagSoll"] == DBNull.Value ? null : (DateTime?)dr["AbholtagSoll"]; KritischerAuftrag = (bool)dr["KritischerAuftrag"]; VertriebsBereichID = (int)dr["VertriebsBereichID"]; VertriebsBereich = (string)dr["VertriebsBereich"]; } #endregion}
public ObservableCollection<clsLosSpezialsicht> Lose { get; set; }
Hi Benedikt,
Thank you for the provided image and code snippets.
Based on your setup, the two main optimizations I can offer are to:
1) Use the GridViewRowCoreStyle on the bottom-level RadGridView if its items will not have any children. You can define the style in the Resources collection of the bottom-level HierarchyChildTemplate.
2) Set the MaxHeight and MaxWidth properties of the child grids as, by default, they're measured with infinity and UI virtualization will be turned off, which means that all of their cells will be rendered which in this particular case due to the big number of columns is a considerable amount.
You can also go over the Tips and Tricks article if you have not done so already to see if any of the proposed optimizations also work for you.
If the results you observe are still not satisfactory, I can only suggest that you send over a sample project which I will then profile at my end to investigate why the degraded performance is observed. You can do so in a separate support ticket so that you do not share any sensitive data in the forums.
Please let me know how this goes.
Regards,
Dilyan Traykov
Progress Telerik
Virtual Classroom, the free self-paced technical training that gets you up to speed with Telerik and Kendo UI products quickly just got a fresh new look + new and improved content including a brand new Blazor course! Check it out at https://learn.telerik.com/.