Hallo Zusammen
Ich habe ein neues Problem:
Ich habe ein DataGrid in dem ich Angaben zu einer Wohnung, Haus speichern möchte. Nun will ich noch eine Combobox im DataGrid das von der tb_contact geladen werden soll und die ID des Contacts soll in die tb_subobject gespeichert werden. Wie muss ich die Combobox laden / einbinden um die Werte der tb_contact auswählen zu können?
Ein zweites Problem habe ich nun wenn ich eine neue Zeile ausfüllen will, dann erscheint die Fehlermeldung: "Dynamic SQL generation is not supported against multiple base tables." Mir ist klar was die Bedeutung der Meldung heisst, jedoch die Lösung nicht. Muss ich die Tabellen mit Join verbinden? Eigentlich möchte ich ja nur in die tb_subObject speichern, die anderen Tabellen sind nur für die Detailanzeige (RowDetailsTemplate) vorhanden. Leider finde ich keinen Lösungsansatz, ausser von ausserhalb des GataGrids via TextBoxen zu füllen dann bäuchte ich den Speicherbefehl nicht mehr. Das soll aber nicht die Lösung sein.
Gruss und Danke
Ich habe ein neues Problem:
Ich habe ein DataGrid in dem ich Angaben zu einer Wohnung, Haus speichern möchte. Nun will ich noch eine Combobox im DataGrid das von der tb_contact geladen werden soll und die ID des Contacts soll in die tb_subobject gespeichert werden. Wie muss ich die Combobox laden / einbinden um die Werte der tb_contact auswählen zu können?
Ein zweites Problem habe ich nun wenn ich eine neue Zeile ausfüllen will, dann erscheint die Fehlermeldung: "Dynamic SQL generation is not supported against multiple base tables." Mir ist klar was die Bedeutung der Meldung heisst, jedoch die Lösung nicht. Muss ich die Tabellen mit Join verbinden? Eigentlich möchte ich ja nur in die tb_subObject speichern, die anderen Tabellen sind nur für die Detailanzeige (RowDetailsTemplate) vorhanden. Leider finde ich keinen Lösungsansatz, ausser von ausserhalb des GataGrids via TextBoxen zu füllen dann bäuchte ich den Speicherbefehl nicht mehr. Das soll aber nicht die Lösung sein.
XML-Quellcode
- <DataGrid Grid.Row="1" ItemsSource="{Binding}" Name="dgvSubObject" BeginningEdit="dgvSubObject_BeginningEdit" RowEditEnding="dgvSubObject_RowEditEnding" AutoGenerateColumns="False" AutoGeneratingColumn="dgvSubObject_AutoGeneratingColumn" HeadersVisibility="Column" >
- <DataGrid.ContextMenu>
- <ContextMenu>
- <MenuItem Header="click me" />
- </ContextMenu>
- </DataGrid.ContextMenu>
- <DataGrid.RowDetailsTemplate>
- <DataTemplate>
- <DockPanel Background="GhostWhite">
- <Grid Margin="0,10">
- <Grid.ColumnDefinitions>
- <ColumnDefinition Width="Auto" />
- <ColumnDefinition Width="*" />
- </Grid.ColumnDefinitions>
- <Grid.RowDefinitions>
- <RowDefinition Height="Auto" />
- <RowDefinition Height="Auto" />
- <RowDefinition Height="Auto" />
- </Grid.RowDefinitions>
- <TextBlock Text="Mieter: " FontWeight="Bold" />
- <TextBlock Text="{Binding Mieter}" Grid.Column="1" />
- <TextBlock Text="Telefon: " FontWeight="Bold" Grid.Row="1" />
- <TextBlock Text="{Binding tel}" Grid.Column="1" Grid.Row="1" />
- <TextBlock Text="E-Mail: " FontWeight="Bold" Grid.Row="2" />
- <TextBlock Text="{Binding email}" Grid.Column="1" Grid.Row="2" />
- </Grid>
- </DockPanel>
- </DataTemplate>
- </DataGrid.RowDetailsTemplate>
- <DataGrid.AlternatingRowBackground>
- <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
- <GradientStop Color="Black" Offset="0"/>
- <GradientStop Color="White" Offset="1"/>
- <GradientStop Color="#FFD2D2D2" Offset="0.267"/>
- </LinearGradientBrush>
- </DataGrid.AlternatingRowBackground>
- <DataGrid.ColumnHeaderStyle>
- <Style/>
- </DataGrid.ColumnHeaderStyle>
- <DataGrid.Columns>
- <DataGridTextColumn Header="AuftragsNr" Binding="{Binding OrderNr}"/>
- <DataGridTextColumn Header="Stockwerk" Binding="{Binding Floor}"/>
- <DataGridTextColumn Header="WhgNr" Binding="{Binding WhgNr}"/>
- <DataGridTextColumn Header="Bez" Binding="{Binding Bez}"/>
- <DataGridTextColumn Header="Raum" Binding="{Binding Raum}"/>
- <DataGridTextColumn Header="Beschreibung" Binding="{Binding Beschreibung}"/>
- <DataGridComboBoxColumn DisplayMemberPath="Street" Header="Strasse" SelectedItemBinding="{Binding Mieter}">
- <DataGridComboBoxColumn.ElementStyle>
- <Style TargetType="{x:Type ComboBox}">
- <Setter Property="ItemsSource" Value="{Binding Mieter}"/>
- </Style>
- </DataGridComboBoxColumn.ElementStyle>
- <DataGridComboBoxColumn.EditingElementStyle>
- <Style TargetType="{x:Type ComboBox}">
- <Setter Property="ItemsSource" Value="{Binding Mieter}" />
- </Style>
- </DataGridComboBoxColumn.EditingElementStyle>
- </DataGridComboBoxColumn>
- </DataGrid.Columns>
- </DataGrid>
C#-Quellcode
- private void fillDgvSubObject()
- {
- myConn.Open();
- myDataAdapter = new MySqlDataAdapter { SelectCommand = new MySqlCommand() { Connection = myConn, CommandText = "SELECT tb_subObject.ID, OrderNr, Floor, WhgNr, Bez, Raum, CONCAT(PreName, ' ', Name)as Mieter, Beschreibung, tel, email FROM tb_subobject, tb_prename, tb_name, tb_contact WHERE OrderNr=" + AuftragID + " AND " +
- "tb_subobject.ID_ContactMieter=tb_contact.ID AND tb_contact.ID_PreName=tb_prename.ID AND tb_contact.ID_Name=tb_name.ID"
- } };
- myDataSet = new DataSet();
- myDataAdapter.Fill(myDataSet, "subobject");
- dgvSubObject.DataContext = myDataSet.Tables["subobject"].DefaultView;
- }
- private void dgvSubObject_BeginningEdit(object sender, DataGridBeginningEditEventArgs e)
- {
- myBuilder = new MySqlCommandBuilder(myDataAdapter);
- DataRowView myDRV = (DataRowView)dgvSubObject.SelectedItem;
- myDRV.BeginEdit();
- }
- private void dgvSubObject_RowEditEnding(object sender, DataGridRowEditEndingEventArgs e)
- {
- DataRowView myDRV = (DataRowView)dgvSubObject.SelectedItem;
- myDRV.EndEdit();
- myDataAdapter.UpdateCommand = myBuilder.GetUpdateCommand();
- myDataAdapter.Update(myDataSet, "subobject");
- }
- private void dgvSubObject_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
- {
- var tc = e.Column as System.Windows.Controls.DataGridTextColumn;
- var b = tc.Binding as System.Windows.Data.Binding;
- b.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
- b.ValidatesOnDataErrors = true;
- b.NotifyOnValidationError = true;
- }
Gruss und Danke