none
DataGrid no me deja editar fila RRS feed

  • Pregunta

  • Buenas tardes: se me ha presentado un problema con un DataGrid, que no me deja actualizar una fila cuando la ItemsSource utiliza una consulta LINQ que une dos tablas. A ver si me explico mejor exponiendo el código:

    XAML

    <Window x:Class="Editar_Titulo_01.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:Editar_Titulo_01"
            mc:Ignorable="d"
            Title="Editar Títulos 01" Height="485" Width="850" WindowStartupLocation="CenterScreen" Loaded="Window_Loaded">
        <Grid>
            <DataGrid x:Name="myDataGrid" x:Uid="myDataGrid" AutoGenerateColumns="False" AlternatingRowBackground="#EAADEA"
                      Margin="0,31,0,0" IsReadOnly="False">
                <DataGrid.Columns>
                    <DataGridTextColumn Binding="{Binding Id_TITULO}" IsReadOnly="True" Header="Id. Título"
                                        Width="SizeToHeader"/>
                    <DataGridTextColumn Binding="{Binding TITULO1, UpdateSourceTrigger=PropertyChanged, Mode=OneWay}"
                                        Width="400"/>
                    <DataGridTextColumn Binding="{Binding EDITOR1, UpdateSourceTrigger=PropertyChanged, Mode=OneWay}"
                                        Width="210"/>
                    <DataGridTextColumn Binding="{Binding FECHAREAL, UpdateSourceTrigger=PropertyChanged, Mode=OneWay,  
                        StringFormat=dd/MM/yyyy}" Width="80"/>

                    <DataGridTemplateColumn Header="Editar Fila">
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <Button Content="Editar Fila" Click="Button_Click"/>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>
                </DataGrid.Columns>
            </DataGrid>
        </Grid>
    </Window>

    C#

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;

    namespace Editar_Titulo_01
    {
        /// <summary>
        /// Lógica de interacción para MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
            }

            private void Window_Loaded(object sender, RoutedEventArgs e)
            {
                TituloDataContext db = new TituloDataContext();
                var titulos = from tit in db.Titulo
                              join edi in db.Editor
                              on tit.Id_EDITOR equals edi.Id_EDITOR
                              orderby tit.TITULO1
                              select new { tit.Id_TITULO, tit.TITULO1, tit.FECHAREAL, edi.EDITOR1 };

                myDataGrid.ItemsSource = titulos;
            }

            private void Button_Click(object sender, RoutedEventArgs e)
            {
                try
                {
                    TituloDataContext dataContext = new TituloDataContext();
                    Titulo tituloRow = myDataGrid.SelectedItem as Titulo;

                    Titulo titulo = (from tit in dataContext.Titulo
                                     where tit.Id_TITULO == tituloRow.Id_TITULO
                                     select tit).Single();

                    titulo.TITULO1 = tituloRow.TITULO1;
                    titulo.FECHAREAL = tituloRow.FECHAREAL;
                    dataContext.SubmitChanges();
                    MessageBox.Show("Fila Actualizada correctamente");

                }
                catch (Exception Ex)
                {
                    MessageBox.Show(Ex.Message);
                    return;
                }
            }
        }
    }

     

    Cuando intento editar una determinada fila haciendo doble click en ella, no me permite hacerlo.

    Muchas gracias por adelantado.

    jueves, 24 de enero de 2019 17:24

Respuestas

  • Muchísimas gracias por tu interés en resolverme el problema.

    Te comento: tampoco me funciona; sigo sin poder editar.

    La clase la crea así:

     public class TituloModel
            {
                public int cIdEditor { get; set; }
                public string cEditor { get; set; }
                public int cIdTitulo { get; set; }
                public string cTitulo { get; set; }
                public DateTime cFechaReal { get; set; }
            }

    Gracias por anticipado.

    viernes, 25 de enero de 2019 13:24

Todas las respuestas

  • hola

    lo que aconsejaria es que definas una clase para asignar al grid y no uno anonima

    var titulos = from tit in db.Titulo
                              join edi in db.Editor
                              on tit.Id_EDITOR equals edi.Id_EDITOR
                              orderby tit.TITULO1
                              select new TituloModel() { Id_TITULO= tit.Id_TITULO, TITULO1=tit.TITULO1, FECHAREAL= tit.FECHAREAL, EDITOR1  = edi.EDITOR1 };

    entonces creas la class

    public class TituloModel{
    
       //aqui defines las propiedades
    
    }

    de esta forma entiendo podrias editar las celdas

    Tambien vaida de ponerle IsReadOnly="False" a las columnas, porque quizas no tome la opcion global

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 24 de enero de 2019 17:45
  • Muchísimas gracias por tu interés en resolverme el problema.

    Te comento: tampoco me funciona; sigo sin poder editar.

    La clase la crea así:

     public class TituloModel
            {
                public int cIdEditor { get; set; }
                public string cEditor { get; set; }
                public int cIdTitulo { get; set; }
                public string cTitulo { get; set; }
                public DateTime cFechaReal { get; set; }
            }

    Gracias por anticipado.

    viernes, 25 de enero de 2019 13:24