it4baer
Goto Top

WPF CSharp ID onClick UND Rückgabe in benachbarten Bereich

Hi,

ich habe eine Datenstruktur, welche man mit einem kleinen Tool durchsuchen können soll...

Dazu habe ich auf der "Startseite" ein Datagrid, welches mir die betroffenen Datensätze aus der Datenbank lädt...
wenn ich eine Zeile anklicke, dann wird darunter eine Zeile ausgeklappt und in dieser befindet sich ein "eigenes Grid"

Das Grid beinhaltet links (Spalten VEND, STATUS, ID) nochmal ein Datagrid (welches über ein Binding sich weitere Daten aus einer "List" holt)
und Rechts ein Feld (grüner Bereich), auf welchen dann Inhalte angezeigt werden sollen (je nachdem was man auf DataGrid [weitere Informatinen anklickt]).

ca tool 1

Wie kann ich
1. links Herausfinden welche Zeile angeklickt wurde?

so komme ich zwar auf die Zeilennummer, aber nicht wirklich auf die ID welche angeklickt wurde, gibt es eine Möglichkeit beim EventSetter einen Parameter mit zu übertragen?
z.B. wie beim Button: Tag="{Binding Path=ID}"
XAML:
<DataGrid.Resources>
    <Style TargetType="DataGridRow">  
        <EventSetter Event="MouseUp" Handler="rclk" />  
    </Style>
</DataGrid.Resources>

C#:
        private void rclk(object sender, RoutedEventArgs e)
        {
            DataGridRow selectedRow = sender as DataGridRow;
        }

das 2. Problem ist, wenn ich dann die Daten verarbeitet habe, möchte ich diese rechts (grün) im "Ausgabebereich" anzeigen. Wie kann ich auf den Ausgabebereich zugreifen, wenn dieser doch "Theoretisch" pro Gridreihe 1x angezeigt wird?

Content-Key: 360029

Url: https://administrator.de/contentid/360029

Printed on: April 25, 2024 at 23:04 o'clock

Member: it4baer
it4baer Jan 08, 2018 updated at 09:20:55 (UTC)
Goto Top
evtl. mal mein xaml Code:

<DataGrid x:Name="certGrid" Margin="10,38,10,10" AlternationCount="2" CanUserSortColumns="False">  
	
	<DataGrid.RowStyle>
		<Style TargetType="DataGridRow">  
			<Setter Property="FontSize" Value="14"/>  
			<Setter Property="Background" Value="White" />  

			<Style.Triggers>
				<Trigger Property="ItemsControl.AlternationIndex" Value="0">  
					<Setter Property="Background" Value="LightBlue"></Setter>  
				</Trigger>
				<Trigger Property="ItemsControl.AlternationIndex" Value="1">  
					<Setter Property="Background" Value="Transparent"></Setter>  
				</Trigger>

				<DataTrigger Binding="{Binding Path=STATUS, Converter={StaticResource testDate}, ConverterParameter=expiringSoon }" Value="true">  
					<Setter Property="Background" Value="#FFFDE4A1" />  
				</DataTrigger>

				<DataTrigger Binding="{Binding Path=STATUS, Converter={StaticResource testDate}, ConverterParameter=expired }" Value="true">  
					<Setter Property="Background" Value="#FFFDA1A1" />  
				</DataTrigger>
			</Style.Triggers>

		</Style>

	</DataGrid.RowStyle>

	<DataGrid.RowDetailsTemplate>
		<DataTemplate>
			<Grid>
				<TabControl Name="{Binding Path=ID}">  
					<TabItem Header="Zertifikate">  
						<Grid Background="#FFE5E5E5">  
							<Grid.ColumnDefinitions>
								<ColumnDefinition Width="2*"/>  
								<ColumnDefinition Width="7*"/>  
							</Grid.ColumnDefinitions>

							<DataGrid Grid.Column="0" IsReadOnly="True" ItemsSource="{Binding Path=OWNERNAME, Converter={StaticResource certReader}, ConverterParameter=GetCertList,IsAsync=True}" >  
								
								<DataGrid.Resources>
									<Style TargetType="DataGridRow">  
										<EventSetter Event="MouseUp" Handler="rclk" />  
									</Style>
								</DataGrid.Resources>

							</DataGrid>
							<ListView Grid.Column="1" />  
						</Grid>
					</TabItem>
					<TabItem Header="Emails">  
						<Grid Background="#FFE5E5E5">  
							<DataGrid />
						</Grid>
					</TabItem>
				</TabControl>
			</Grid>
		</DataTemplate>
	</DataGrid.RowDetailsTemplate>

</DataGrid>


spannend sind Folgende bereiche:
<DataGrid.Resources>
	<Style TargetType="DataGridRow">  
		<EventSetter Event="MouseUp" Handler="rclk" />  
	</Style>
</DataGrid.Resources>
einmal die Zeile im "Untergrid" <- welche durch Klicken eine Methode Aufrufen soll und die ID (1. Spalte) mit Übergeben soll

und 2.
das Listview, direkt neben dem "Untergrid"
<ListView Grid.Column="1" />

Leider weiß ich überhaupt nicht, wie ich das "Ansprechen" kann... ich meine das TabControl existiert ja in meiner Tabelle hundertfach und der Inhalt sieht immer "gleich" aus, d.h. >selbst wenn ich dem ListView einen Namen gebe< kann ich den Namen noch immer nicht "direkt" ansprechen.

Vielen Dank für jede Idee

Edit:
im DataGrid könnte man
SelectedItem="{Binding Path=SelectedItem, Mode=OneWay}"

und im ListView (was ich jetzt erstmal als TextBlock umgebaut habe):
<TextBlock Grid.Column="1" Text="{Binding Path=SelectedItem.ID}"/>

Leider müsste man trotzdem noch irgendwie eine Verbindung schaffen

Edit2:
okay, ich war auf zu viele schläuche gestanden... habe es jetzt über Binding lösen können:
<DataGrid x:Name="udg" IsReadOnly="True" SelectedItem="{Binding SelectedItem}">
<TextBlock Grid.Column="1" Text="{Binding SelectedItem.ID, ElementName=udg}"/>