Laden...

Profil von Tommy111

myCSharp.de - Member Mitglied seit
T
Tommy111
myCSharp.de - Member
2
Themen
5
Beiträge
Dabei seit
09.08.2012
Letzte Aktivität
vor 13 Jahren
Erstellt vor 13 Jahren

Hallo Zusammen,
als erstes ich war mir nicht sicher in welches Forum das gehört hab mich jetzt mal für das WPF-Forum entschieden ....

Mein Problem ist folgendes ....
ich habe eine Forms Anwendung in der ich ein WPF-DataGrid nutzen möchte da ich Eigenschaften wie das Grouping etc. nutzen möchte.
Das "einbinden" über den Elementhost hat auch wunderbar funktioniert i bekomme die Daten auch von einer SQL DB "gebindet" so:


dataGrid1.ItemsSource = Mapper.Map<IList<EquipmentObject>, SortableBindingList<EquipmentDTO>>(equipmentObjects); 

allerdings funktioniert das Grouping nicht.
Ich weiß das es dazu viele Bsp. gibt hab die auch alle durchgearbeitet allerdings funktioniert es bei mir einfach nicht....
ich bekomme die Daten einfach nicht "gegroupt" und wenn ich das Binding über die
ObservableCollection also so:


   ObservableCollection<EquipmentObject> equipCollection = new ObservableCollection<EquipmentObject>(equipmentObjects);

            ListCollectionView equipments = new ListCollectionView(equipCollection);
            equipments.GroupDescriptions.Add(new PropertyGroupDescription("description"));

            dataGrid1.ItemsSource = equipCollection;

mache funktioniert das binding nicht mehr und dementsprechend das Groupuing natürlich auch nicht.

Hier noch mein XAML code

 <UserControl x:Class="EE_ASAP_MMV.DataGrid"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="426" d:DesignWidth="666">

    <DataGrid Name="dataGrid1" AutoGenerateColumns="False" Height="430" Width="855" AlternatingRowBackground="#efefef" AlternationCount="2" ItemsSource="{Binding GroupedCustomers}">
        <Style d:key="GroupHeaderStyle" TargetType="{x:Type GroupItem}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type GroupItem}">
                        <Expander x:Name="exp" IsExpanded="True" Background="White" Foreground="Black">
                            <Expander.Header>
                                <TextBlock Text="{Binding Name}"/>
                            </Expander.Header>
                            <ItemsPresenter />
                        </Expander>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

        <DataGrid.Columns>
            <DataGridTextColumn Header="ID" Width="50" Binding="{Binding id}"/>
            <DataGridTextColumn Header="Beschreibung" Width="100" Binding="{Binding description}"/>
            <DataGridTextColumn Header="Hersteller" Width="100" Binding="{Binding vendor}"/>
            <DataGridTextColumn Header="Typ" Width="100" Binding="{Binding typ}"/>
            <DataGridTextColumn Header="Messbereich" Width="200" Binding="{Binding measurementRange}"/>
            <DataGridTextColumn Header="Kalibrierintervall" Width="100" Binding="{Binding calibrationInterval}"/>
        </DataGrid.Columns>

        <DataGrid.GroupStyle>
            <GroupStyle>
                <GroupStyle.ContainerStyle>
                    <Style TargetType="{x:Type GroupItem}">
                        <Setter Property="Margin" Value="0,0,0,5"/>
                        <Setter Property="Template">
                            <Setter.Value>
                                <ControlTemplate TargetType="{x:Type GroupItem}">
                                    <Expander IsExpanded="True" Background="#FF112255" BorderBrush="#FF002255" Foreground="#FFEEEEEE" BorderThickness="1,1,1,5">
                                        <Expander.Header>
                                            <DockPanel>
                                                <TextBlock FontWeight="Bold" Text="{Binding Path=Name}" Margin="5,0,0,0" Width="100"/>
                                                <TextBlock FontWeight="Bold" Text="{Binding Path=ItemCount}"/>
                                            </DockPanel>
                                        </Expander.Header>
                                        <Expander.Content>
                                            <ItemsPresenter />
                                        </Expander.Content>
                                    </Expander>
                                </ControlTemplate>
                            </Setter.Value>
                        </Setter>
                    </Style>
                </GroupStyle.ContainerStyle>
            </GroupStyle>      
        </DataGrid.GroupStyle>
    </DataGrid>
</UserControl>

Vielen Dank schon mal im vor raus wenn jemandem auffällt was i falsch gemacht habe!
LG Tommy

Erstellt vor 13 Jahren

Hallo scrabbl,

ja genau das ist mein Problem ...
die eine cb reagiert immer auf die andere aber wenn bei der einen mal was ausgewählt wurde solle das nicht mehr vom Programm geändert werden ... nur vom Benutzer

Erstellt vor 13 Jahren

Hallo Diräkt,

Hallo Tommy111
Der ComboBox kann auch eine DataSource zugewiesen werden. Danach könntest du anstatt alle Items löschen und neu hinzufügen, einfach die Source filtern.

das "klingt" gut 😃 hast du zufällig ein codebsp.???

Erstellt vor 13 Jahren

Hallo,

du clearst ja die jeweils andere ComboBox. Im Fall das dein Query nichts zurückliefert, bleben die halt dann leer.

ja das muss ich machen da ich ja bevor in einer cb etwas ausgewählt ist in beiden ja alle möglichen auszahlen bereitstelle.... wenn dann eine cb gewählt ist muss ich die andere liste ja clearen und die neuen einträge einfügen wenn i das nicht mache habe i die einträge ja doppelt drin...

Erstellt vor 13 Jahren

Hallo Zusammen,
ich habe eine Problem....
und zwar habe ich 2 Comboboxen deren Werte (aus eine SQL DB) abhängig von einander sind Beispiel:
ist in CB1 der das Projekt 1 gewählt werden in CB2 nur die Tests angezeigt die zu diesem Projekt gehören....
und anderstrum
also wenn in CB2 ein test gewählt wird sollen in CB1 nur die Projekte angezeigt werden die auch zu diesem Test gehören.

bisher bin ich soweit gekommen


      private void cbProject_SelectedIndexChanged(object sender, EventArgs e)
        {
            project = cbProject.SelectedItem as Project;
            dtpEndDate.Value = project.endDate.Value;
            dtpStartDate.Value = project.startDate.Value;

                setups = session.QueryOver<TestSetup>()
                     .OrderBy(ts => ts.testSetupName).Asc
                     .JoinQueryOver<Project>(ts => ts.Projects)
                     .Where(p => p.id == project.id)
                     .List();
                ;
                cbSetUp.Items.Clear();
                cbSetUp.Items.AddRange(setups.ToArray());
        }

        private void cbProject_Format(object sender, ListControlConvertEventArgs e)
        {
            project = e.ListItem as Project;
            if (project == null)
                return;
            e.Value = project.projectName + " " + project.jobNumber;
        }

        private void cbSetUp_Format(object sender, ListControlConvertEventArgs e)
        {
            testSetUp = e.ListItem as TestSetup;
            if (testSetUp == null)
                return;
            e.Value = testSetUp.testSetupName +" "+ testSetUp.setupNumber;
        }

        private void cbSetUp_SelectedIndexChanged(object sender, EventArgs e)
        {
            TestSetup ts = cbSetUp.SelectedItem as TestSetup;

                projects = session.QueryOver<Project>()
                    .OrderBy(p => p.projectName).Asc
                    .JoinQueryOver<TestSetup>(p => p.TestSetups)
                    .Where(p => p.id == ts.id)
                    .List();
                ;
                cbProject.Items.Clear();
                cbProject.Items.Add("");
                cbProject.Items.AddRange(projects.ToArray());
                cbProject.ValueMember = project.projectName;
            CheckAllValues();
        }

das Problem ist allerdings wenn ich in der einen CB was auswähle wird der der anderen wieder gelöscht....
also wähle i cb1 aus dann stehen in cb2 die richtigen Einträge zur Verfügung wähle ich in cb2 etwas aus wird der wert in cb1 wieder gelöscht.

Kann mir jemand helfen???
Vielen Dank schon mal