none
WPF entity franework vb

    Pregunta

  • Hola amigos alguien podria porfavor ayudarme a poder en una ventana de wpf llamar a una tabla del sql server con entity franework ponerlo en un datagrid y a la vez poder seleccionar un iten y cargarlos en texbox sus datos de esa fila.

    asi lleno mi datagrid:

      Dim customerList = From c In db.tabla 
                               select c.
            grilla.ItemsSource = customerList.ToList()

    se muestra en la grilla los datos, pero ahora me falta que al seleccionar una fila los datos de esa fila se llenen en los texbox.

    gracias por su ayuda....

    • Cambiado Enrique M. MontejoMVP jueves, 24 de mayo de 2018 16:31 Pregunta relacionada con Entity Framework.
    martes, 22 de mayo de 2018 18:32

Todas las respuestas

  • Puedes lograrlo utilizando Bindings desde el Código XAML del formulario por ejemplo para esto vamos a enlazar los textbox a la propiedad SelectedItem del datagrid propiedad que nos devolverá el elemento que está actualemnte seleccionado en el Datagrid ejemplo:

    El formulario:

    <Window x:Class="EjemploWpf.MainWindow"
            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:EjemploWpf"
            mc:Ignorable="d"
            Title="MainWindow" Height="350" Width="525">
        <Window.DataContext>
            <local:MainViewModel></local:MainViewModel>
        </Window.DataContext>
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition></RowDefinition>
                <RowDefinition></RowDefinition>
                <RowDefinition></RowDefinition>
                <RowDefinition></RowDefinition>
                <RowDefinition></RowDefinition>
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition></ColumnDefinition>
                <ColumnDefinition></ColumnDefinition>
            </Grid.ColumnDefinitions>
            <DataGrid Name="UsersGrid" ItemsSource="{Binding Users, Mode=TwoWay}" Grid.ColumnSpan="2"/>
            <Label Content="Id" Grid.Row="1" Grid.Column="0"/>
            <!-- El enlace se hace a:
                SelectedItem.Id: Es la ruta a la cual vamos a enlazar nuestro control.
                ElementName=UsersGrid: El control al que estamos enlazando
                Mode=TwoWay: Esto significa que el enlace funcionara en ambos sentidos tanto si el objeto cambia desde la fuente como si cambia desde el textbox
                UpdateSourceTrigger=PropertyChanged: Es la forma en la que se dispará el evento de cambio para poder utilizar este modo se requiere que la clase implemente la interfaz INotifyPropertyChange
            -->
            <TextBox Grid.Row="1" Grid.Column="1" Text="{Binding SelectedItem.Id, ElementName=UsersGrid, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"></TextBox>
            <Label Content="Name" Grid.Row="2" Grid.Column="0"/>
            <TextBox Grid.Row="2" Grid.Column="1" Text="{Binding SelectedItem.Name, ElementName=UsersGrid, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"></TextBox>
            <Label Content="Password" Grid.Row="3" Grid.Column="0"/>
            <TextBox Grid.Row="3" Grid.Column="1" Text="{Binding SelectedItem.Pasword, ElementName=UsersGrid, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"></TextBox>
        </Grid>
    </Window>

    El CodeBehind de la ventana:

    C#

    namespace EjemploWpf
    {
        /// <summary>
        /// Interaction logic for MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
                var users = new ObservableCollection<User>()
                {
                    new User() {Id = 1, Name = "Luisito", Pasword = "elGrande"},
                    new User() {Id = 2, Name = "pepe", Pasword = "pecas"},
                    new User() {Id = 3, Name = "jorge", Pasword = "1234"}
                };
    
                UsersGrid.ItemsSource = users;
            }
        }
    }

    Vb.Net

    Public Partial Class MainWindow
        Inherits Window
    
        Public Sub New()
            InitializeComponent()
            Dim users = New ObservableCollection(Of User)() From {
                New User() With {
                    .Id = 1,
                    .Name = "Luisito",
                    .Pasword = "elGrande"
                },
                New User() With {
                    .Id = 2,
                    .Name = "pepe",
                    .Pasword = "pecas"
                },
                New User() With {
                    .Id = 3,
                    .Name = "jorge",
                    .Pasword = "1234"
                }
            }
            UsersGrid.ItemsSource = users
        End Sub
    End Class
    


    Y el objeto user: 

    C#

    namespace EjemploWpf
    {
        public class User:INotifyPropertyChanged
        {
            private int _id;
            private string _name;
            private string _pasword;
    
            public int Id
            {
                get { return _id; }
                set
                {
                    if (value == _id) return;
                    _id = value;
                    OnPropertyChanged();
                }
            }
    
            public string Name
            {
                get { return _name; }
                set
                {
                    if (value == _name) return;
                    _name = value;
                    OnPropertyChanged();
                }
            }
    
            public string Pasword
            {
                get { return _pasword; }
                set
                {
                    if (value == _pasword) return;
                    _pasword = value;
                    OnPropertyChanged();
                }
            }
    
            public event PropertyChangedEventHandler PropertyChanged;
    
    
            protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
            {
                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    }

    Vb.Net

    Namespace EjemploWpf
        Public Class User
            Inherits INotifyPropertyChanged
    
            Private _id As Integer
            Private _name As String
            Private _pasword As String
    
            Public Property Id As Integer
                Get
                    Return _id
                End Get
                Set(ByVal value As Integer)
                    If value = _id Then Return
                    _id = value
                    OnPropertyChanged()
                End Set
            End Property
    
            Public Property Name As String
                Get
                    Return _name
                End Get
                Set(ByVal value As String)
                    If value = _name Then Return
                    _name = value
                    OnPropertyChanged()
                End Set
            End Property
    
            Public Property Pasword As String
                Get
                    Return _pasword
                End Get
                Set(ByVal value As String)
                    If value = _pasword Then Return
                    _pasword = value
                    OnPropertyChanged()
                End Set
            End Property
    
            Public Event PropertyChanged As PropertyChangedEventHandler
    
            Protected Overridable Sub OnPropertyChanged(
    <CallerMemberName> ByVal Optional propertyName As String = Nothing)
                PropertyChanged?.Invoke(Me, New PropertyChangedEventArgs(propertyName))
            End Sub
        End Class
    End Namespace

    Espero te sea de ayuda.

    Saludos.




    • Editado Yamiel Dash martes, 22 de mayo de 2018 19:52 Añadida traduccion Vb.net
    martes, 22 de mayo de 2018 19:43