none
WPF Seleccionar una celda y obtener el valor de otra celda dentro del mismo item RRS feed

  • Pregunta

  • Hola Buen día. 

    Necesito de su ayuda. Miren tengo un Datagrid, ingreso las columnas manualmente. entre ellas hay 2 columnas que es de tipo DataGridCheckBoxColumn y lo que quiero hacer es que cuando haga Check en el segundo me valide primero dentro de la misma fila el primer ChekBox. Es decir  Sí esta seleccionado el primer CheckBox que me permita el segundo y si no esta seleccionado que no me lo permita. Espero me halla podido explicar bien. Gracias Saludos,..


    Megems

    viernes, 4 de marzo de 2016 4:59

Todas las respuestas

  • Hola hay alguien ?


    Megems

    miércoles, 9 de marzo de 2016 2:42
  • Hola,

    Cuando dices ingreso las columnas manualmente, ¿a que te refieres?, porque segun lo hagas hay distintas maneras de solucionarlo. ¿podrias poner la parte del código donde añades las columnas?

    Un saludo.


    Es de buena educación dar las gracias cuando te ayudan, si alguna respuesta te ha sido de utilidad agradécelo marcandola como útil.
    Blog


    • Editado Rodripelto miércoles, 9 de marzo de 2016 9:28
    miércoles, 9 de marzo de 2016 9:28
  • Hola amigo, gracias por comentarme y disculpa la tardanza por que me puse atrabajar en otros módulos, te pongo una parte del código de mi datagrid

    <DataGrid x:Name="dgHuesped"  SelectionUnit ="FullRow"  SelectionMode="Single"  CanUserAddRows="False" AlternatingRowBackground="Gainsboro"  AlternationCount="2" ItemsSource="{Binding}" AutoGenerateColumns="False">
     <DataGridTemplateColumn x:Name="Check1Column" IsReadOnly="False"  Header="Check1" Width="auto" >
                                    <DataGridTemplateColumn.CellTemplate >
                                        <DataTemplate>
                                            <CheckBox IsChecked="{Binding Check1Column}"  Click="Check1Column_Click"  HorizontalAlignment="Center" />
                                        </DataTemplate>
                                    </DataGridTemplateColumn.CellTemplate>
                                </DataGridTemplateColumn>
    
       <DataGridTemplateColumn x:Name="guChek2Column" IsReadOnly="False"  Header="Avl" Width="auto">
                                  <DataGridTemplateColumn.CellTemplate>
                                    <DataTemplate>
                                      <CheckBox IsChecked="{Binding Chek2Column}" Click="Chek2Column_Click"  HorizontalAlignment="Center" />
                                    </DataTemplate>
                                  </DataGridTemplateColumn.CellTemplate>
                                </DataGridTemplateColumn>
    </DataGrid>
    
     

    Aqui tengo 2 columnas de tipo checkbox. Y en el código behind lo tengo así

     private void Check2Column_Click(object sender, RoutedEventArgs e)
        {
          Huesped item = dgHuesped.Items[dgHuesped.Items.IndexOf(dgHuesped.CurrentItem)] as Huesped;
          var chk = sender as CheckBox;
          if (chk.IsChecked.Value)
          {
             //validamos que primero halla hecho Check en la primera columna 
             //de ser así ingresamos al formulario
             if (item.checkHuesped)
              {
                frmSeguimeinto _frmFoll = new frmSeguimiento();
                _frmFoll.Owner = this;
                _frmFoll.ShowDialog();
              }               
          }
        }

    La cuestión esta así : cuando el usuario me haga check en el segundo para que habra el formulario de seguimiento como validación  primero tiene que estar checkeado (o como se diga jeje) el primero de no ser así que no me permita.

    utilizo esta linea de codigo para obtener el valor del primer check

     Huesped item = dgHuesped.Items[dgHuesped.Items.IndexOf(dgHuesped.CurrentItem)] as Huesped;
    pero lo que me arroja es falso, Es decir aunque el usuario visualmente haga check en el grid, no lo refleja o no se actualiza a la hora de obtener el Item y la informacion que me arroja el item es del original es decir es la información de cuando cargo el Datagrid, Es pero me puedas ayudar amigo. Gracias y disculpa la tardanza :) 


    Megems

    martes, 15 de marzo de 2016 4:04
  • Ya  busque la solución solo se necesitaba agregarle template la siguiente linea 

    NotifyOnSourceUpdated=True,Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"

    es decir quedaría así 

     <DataGridTemplateColumn x:Name="Check1Column" IsReadOnly="False"  Header="Check1" Width="auto" >
                                    <DataGridTemplateColumn.CellTemplate >
                                        <DataTemplate>
                                            <CheckBox IsChecked="{Binding Check1Column, NotifyOnSourceUpdated=True,Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"}"  Click="Check1Column_Click"  HorizontalAlignment="Center" />
                                        </DataTemplate>
                                    </DataGridTemplateColumn.CellTemplate>
                                </DataGridTemplateColumn>

    de esta forma le estamos informando al datagrid o mas bien a nuestro Template de tipo CheckBox que actualice la instancia y así ya me lo reconoce y listo. 

    saludos..


    Megems

    sábado, 19 de marzo de 2016 6:16