none
Navigieren im WPF Datagrid RRS feed

  • Frage

  • Hallo liebe Kollegen,

    ich verzweifle gerade am Datagrid. Ich habe schon unzählige Sachen ausprobiert für eine ganz einfache Sache, die ich einfach nicht hinbekomme:

    Im Nachfolgenden Beispiel möchte ich, wenn die Form geladen ist, dass der Cursor in der Textbox "1" sitzt. Mit betätigen der Enter Taste, soll der Cursor dann "EUR", "5","kg","4","USD","2","Stück" springen, und dann wieder auf die "1".

    2.  Wenn der Cursor in der TextBox "EUR" ist, möchte ich, dass beim betätigen der F5 Taste der Cursor in die TextBox "USD" springt.

    Der Focus soll also IMMER in einer TextBox und nicht DataGridCell, DataGrid oder sonst irgendein Übergeordnetes Element der TextBoxen sein.

    Das ist nur ein Beispiel, mir geht es hier um das Prinzip und daher ist es mir wichtig, dass die Variante mit den Benutzersteuerelementen beibehalten bleibt.

    Vielen Dank schon mal für eure Hilfe.

    Hier der Code:

    <UserControl x:Class="ucBetrag"
                 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" 
                 xmlns:local="clr-namespace:View"
                 mc:Ignorable="d" 
                 d:DesignHeight="300" d:DesignWidth="300">
        <Grid>
            <StackPanel>
                <TextBox Text="{Binding Betrag}"></TextBox>
                <TextBox Text="{Binding Waehrung}"></TextBox>
            </StackPanel>
    
        </Grid>
    </UserControl>
    
    <UserControl x:Class="ucMenge"
                 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" 
                 xmlns:local="clr-namespace:View"
                 mc:Ignorable="d" 
                 d:DesignHeight="300" d:DesignWidth="300">
        <Grid>
            <StackPanel>
                <TextBox Text="{Binding Menge}"></TextBox>
                <TextBox Text="{Binding Einheit}"></TextBox>
            </StackPanel> 
        </Grid>
    </UserControl>
    

    <Window x:Class="Window1"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:View"
            mc:Ignorable="d"
            Title="Window1" Height="300" Width="300">
        <Grid>
            <DataGrid Name="dg" AutoGenerateColumns="False" CanUserAddRows="False" CanUserDeleteRows="False" >
                <DataGrid.Columns>
                    <DataGridTemplateColumn Header="Betrag">
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <local:ucBetrag>
    
                                </local:ucBetrag>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>
                    <DataGridTemplateColumn Header="Menge">
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <local:ucMenge>
    
                                </local:ucMenge>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>
                </DataGrid.Columns>
            </DataGrid>
        </Grid>
    </Window>
    

    Imports System.Collections.ObjectModel
    Public Class Window1
        Private Sub Window1_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
            Dim o As New ObservableCollection(Of Datensatz)
            Dim d As Datensatz
    
            d = New Datensatz
            d.Menge = 5
            d.Einheit = "kg"
            d.Betrag = 1
            d.Waehrung = "EUR"
            o.Add(d)
    
            d = New Datensatz
            d.Menge = 2
            d.Einheit = "Stück"
            d.Betrag = 4
            d.Waehrung = "USD"
            o.Add(d)
    
            dg.ItemsSource = o
    
    
        End Sub
    End Class
    Public Class Datensatz
        Private mMenge As Integer
        Public Property Menge() As Integer
            Get
                Return mMenge
            End Get
            Set(ByVal value As Integer)
                mMenge = value
            End Set
        End Property
    
        Private mEinheit As String
        Public Property Einheit() As String
            Get
                Return mEinheit
            End Get
            Set(ByVal value As String)
                mEinheit = value
            End Set
        End Property
    
        Private mBetrag As Decimal
        Public Property Betrag() As Decimal
            Get
                Return mBetrag
            End Get
            Set(ByVal value As Decimal)
                mBetrag = value
            End Set
        End Property
    
        Private mWaehrung As String
        Public Property Waehrung() As String
            Get
                Return mWaehrung
            End Get
            Set(ByVal value As String)
                mWaehrung = value
            End Set
        End Property
    
    
    
    
    End Class
    


    Freitag, 21. August 2015 11:49

Alle Antworten

  • Hi,
    wenn Du die Selektierung in einer Zeile des DataGrids als Einheit ohne Zellwechsel benötigst, dann solltest Du beide Nutzersteuerelemente in eine Zelle packen. Weiterhin ist unklar, was bei dem vom Anwender erwarteten Verhalten passieren soll, z.B. Tab-Taste.

    --
    Viele Grüsse
    Peter Fleischer (MVP, Partner)
    Meine Homepage mit Tipps und Tricks

    Samstag, 22. August 2015 05:37
  • Hallo ,

    es freut mich ganz besonders, dass du dich der Sache annimmst. Da bin ich überzeugt, dass ich ans Ziel gelange.

    Wie gesagt, es ist nur ein einfaches Beispiel, der Verwendungszweck ist wesentlich komplexer. Warum nicht beide Steuerelemente in einer Spalte? Wegen Sortierung!

    Tab Taste soll wie die Return Taste funktionieren. Egal wie oft ich die Tab Taste drücke, der Cursor soll immer in einer von den 8 Textboxen landen.

    Viele Grüße

    Dirk Schelling

    Dienstag, 25. August 2015 11:55