none
Problemaa al acceder a un DatagridTemplateColumn RRS feed

  • Pregunta

  • Hola que tal

    Recurro a ustedes para que me brinden una mano, estoy trabajando con vs2010 y wpf4 para web.

    Tengo un datagrid que trae los datos de un bd usando linq con capas(logica de negocios) al cargar los datos cambio una columna por un template que es checkbox, todo esto me ha salido muestra la informacion segun la bd sin problemas pero al cambiar el valor del checkbox que se encuentar en el datagrid no puedo acceder a este nuevo valor para garbar en la bd de datos desde un boton ya que este boton es el grabar, el usuario puede cambiar el valor en en una o mas filas. 

    Ojala que me den la ayuda del caso.

    Gracias de antemano

    Saludos a todos.

     

    lunes, 27 de junio de 2011 21:58

Respuestas

  • Hola Desarrollador.

    En un principio, deberias de contemplar la posibilidad de añadir una propiedad con los modelos para el enlace, esto te ayudaria y seria la forma mas eficaz (generalmente en un ViewModel).

    Pero como esto depende de la arquitectura que uses y te puede llevar mas tiempo, te dejo una clase que siempre hay que tener a mano para recorrer el arbol visual tanto para WPF como silverlight

    http://social.msdn.microsoft.com/Forums/es-ES/wpfes/thread/8956494f-6fd0-4cb8-a567-82b22b9f7c4c

    (he cogido este link, por que el amigo Corsario lo posteo en VB.NET que creo que es el que usas)

    La clase en este post creo que se llama helper y dispone de 2 metodos extensores GetChildObject<>() y GetChildObjects<>() que te permitiran buscar objetos en el arbol visual, de modo que para obtener los checkboxes de tu datagrid llamados chk1, solo tendrias que hacer algo asi:

     

    IEnumerable<CheckBox> cheks = dataGrid1.GetChildObjects<CheckBox>("chk1");
    

     

    y esta linea te retornara todos los checks que se llamen chk1 y esten dentro del datagrid1.

    Esta opcion es la mas universal y te servira para acceder a cualquier tipo de control, incluyendo los que estan en una plantilla.

     


    Saludos
    David González
    MCP, MCTS
    Visita mi Blog en: http://www.dgzornoza.com/


    miércoles, 29 de junio de 2011 6:43

Todas las respuestas

  • Hola Desarrollador.

    ¿puedes poner el codigo del template column?

    ¿y como estas enlazando los datos al datagrid?

    Si enlazas los datos al grid mediante una coleccion de modelos que representen una fila y el binding es de 2 direcciones, un cambio en el checkBox deberia de cambiar la los modelos de la coleccion.


    Saludos
    David González
    MCP, MCTS
    Visita mi Blog en: http://www.dgzornoza.com/
    martes, 28 de junio de 2011 16:43
  • Este es xaml

    <DataGrid.Columns>

    <DataGridCheckBoxColumn Header="dato1" Binding="{Binding campobd1}" MinWidth="50" />

    <DataGridTextColumn Header="dato2" Binding="{Binding campobd2}" MinWidth="320" />

     <DataGridTemplateColumn Header="dato3" x:Name="dato3"> <DataGridTemplateColumn.CellTemplate> <DataTemplate > <CheckBox x:Name="chk1" IsChecked="{Binding Path=campobd3}" /> </DataTemplate> </DataGridTemplateColumn.CellTemplate>  </DataGridTemplateColumn>

    </DataGrid.Columns>

     Vb.NET dg1.ItemsSource = objRul1.ListaRegistros(objD)

    Donde ListaRegistros es la funcion de la logica de negocios y el objD es el objeto con la informacion NEcesito acceder a la informnacion de chk1 al dar un click en el boton grabar Saludos

    martes, 28 de junio de 2011 19:54
  • Hola Desarrollador.

    En un principio, deberias de contemplar la posibilidad de añadir una propiedad con los modelos para el enlace, esto te ayudaria y seria la forma mas eficaz (generalmente en un ViewModel).

    Pero como esto depende de la arquitectura que uses y te puede llevar mas tiempo, te dejo una clase que siempre hay que tener a mano para recorrer el arbol visual tanto para WPF como silverlight

    http://social.msdn.microsoft.com/Forums/es-ES/wpfes/thread/8956494f-6fd0-4cb8-a567-82b22b9f7c4c

    (he cogido este link, por que el amigo Corsario lo posteo en VB.NET que creo que es el que usas)

    La clase en este post creo que se llama helper y dispone de 2 metodos extensores GetChildObject<>() y GetChildObjects<>() que te permitiran buscar objetos en el arbol visual, de modo que para obtener los checkboxes de tu datagrid llamados chk1, solo tendrias que hacer algo asi:

     

    IEnumerable<CheckBox> cheks = dataGrid1.GetChildObjects<CheckBox>("chk1");
    

     

    y esta linea te retornara todos los checks que se llamen chk1 y esten dentro del datagrid1.

    Esta opcion es la mas universal y te servira para acceder a cualquier tipo de control, incluyendo los que estan en una plantilla.

     


    Saludos
    David González
    MCP, MCTS
    Visita mi Blog en: http://www.dgzornoza.com/


    miércoles, 29 de junio de 2011 6:43