none
Como acceder al valor que tengo cargado en la Window1

    Question

  • Hola,

    mi caso es el tipìco que tengo un campo que es la fecha_nacimiento cargada en la window1 y en el campo.

     <TextBox  Name="tx_data_naixement" Width="auto" Text="{Binding Path=fecha_nacimiento, Mode=TwoWay}"  />

    qual es la manera mas correcta para cargar el valor contenido en este campo para paserlo  a una variable  Date y a partir de aqui calcular edad?

    Gracias.

    Monday, June 28, 2010 11:02 AM

Answers

  • Aparentemente, al inicializar la variable el texbox tx_data_naixement  esta vacio. Proba reemplazar la línea

    Dim d As Date = New Date(tx_data_naixement.Text)

    por

    Dim d As Date = New Date(Now)

    DateTime.TryParse(tx_data_naixement.Text, d)

    y aca fijate que valor tiene el DateTime. Yo estoy seguro que el problema es que al inicializarse el form, como el textbox no tiene ningún valor, al querer inicializar una fecha te da error.

    Saludos

     


    Sandro D. Garcia
    MCTS: .NET Framework 4, Windows Applications.
    Colabora con el foro: Si este mensaje te es de utilidad marcalo como respuesta.
    -----
    Please, if this message helps you, remember mark it as response, may be can help more people with same problem.
    -----
    Mi Blog
    • Marked as answer by Spandau Tuesday, July 06, 2010 11:37 AM
    Friday, July 02, 2010 4:58 AM

All replies

  • No entiendo muy bien tu pregunta, pero imagino que lo que queres hacer es pasar el contenido de tu textbox, que esta en formato string a tu variable tipo Date, evitando que no haya errores inesperados.

    Si este es el caso, tenes que hacer un cast explicito y podrías hacerlo así:

    DateTime d;
    if(!DateTime.TryParse(tx_data_naixement.Text, d)
    {
       //Aquí escribes un mensaje de error indicando que el formato de la fecha es invalido.
    }
    Saludos,

     


    Sandro D. Garcia
    Colabora con el foro: Si este mensaje te es de utilidad marcalo como respuesta.
    -----
    Please, if this message helps you, remember mark it as response, may be can help more people with same problem.
    -----
    Mi Blog
    Monday, June 28, 2010 6:04 PM
  • No entiendo muy bien tu pregunta, pero imagino que lo que queres hacer es pasar el contenido de tu textbox, que esta en formato string a tu variable tipo Date, evitando que no haya errores inesperados.

    Si este es el caso, tenes que hacer un cast explicito y podrías hacerlo así:

    {DateTime d;
    if(!DateTime.TryParse(tx_data_naixement.Text, d) 
    //Aquí escribes un mensaje de error indicando que el formato de la fecha es invalido.
    }
    Saludos,

    Gracias Sandro,

    veo que no mke he explicado del todo bien,

    mi caso es que' por ejemplo para realizar los calculos' tengo una variable  tipo Date i le quiero pasar lo que me muestra el  tx_data_naixement, no se si lo mejor en mi caso es cargar directamente a traves del Texbox o si hay alguna manera(más facil)  de acceder a este campo a traves del dataset en el Row que tengo cargado en la ventana....

    He provado tu ejemplo partiendo que la vaiable es date i el campo es Date:

       Dim datanaix As Date=tx_data_naixement  y me genera el error:

    Error    1    Un valor de tipo 'System.Windows.Controls.TextBox' no se puede convertir en 'Date'.

    tambien he provado con el conversor que tambien me genera error cuando cargo:

    Dim datanaix As Date = Convert.ToDateTime(tx_data_naixement)


    Monday, June 28, 2010 9:55 PM
  • Hola.
    Prueba: Dim datanaix As new DateTime = cDate(tx_data_naixement.content)
    Si luego quieres trabajar sólo con el día (tx_data_naixement.content). y busca el formato que más se adapte a tus necesidades.
    Monday, June 28, 2010 10:53 PM
  • Hola.
    Prueba: Dim datanaix As new DateTime = cDate(tx_data_naixement.content)
    Si luego quieres trabajar sólo con el día (tx_data_naixement.content). y busca el formato que más se adapte a tus necesidades.
    Monday, June 28, 2010 10:53 PM
  • Hola.
    Prueba: Dim datanaix As new DateTime = cDate(tx_data_naixement.content)
    Si luego quieres trabajar sólo con el día (tx_data_naixement.content). y busca el formato que más se adapte a tus necesidades.


    Gracias corsarioVasco,

    lo he provado pero .content no es una propiedad de una caja de texto en Wpf... he provado diversas propiedades i me genera error en todas...

    Tuesday, June 29, 2010 9:27 AM
  • En vez de content prueba con "DataContext", te devuelve el objeto que estas bindeando, en el caso de un string creo que es lo mismo que la propiedad text.. 

    creo que para lo que necesitas hay varias alternativas, por tratarse de fecha siempre va a dar problemas segun la localizacion (dd/MM/yyy o MM/dd/yyyy), lo que podes hacer es segun por como lo encaraste:

    Donde del textbox por medio de la propiedad text podrias hacer un split de la cadena para dividirla en variables anio, mes, dia

    Dim Fh as new DateTime(Anio,Mes,Dia)

     

    Porque no usas en vez de un textbox un DatePicker?

     

    saludos

    Tuesday, June 29, 2010 11:25 AM
  • No entiendo muy bien tu pregunta, pero imagino que lo que queres hacer es pasar el contenido de tu textbox, que esta en formato string a tu variable tipo Date, evitando que no haya errores inesperados.

    Si este es el caso, tenes que hacer un cast explicito y podrías hacerlo así:

    {DateTime d;
    if(!DateTime.TryParse(tx_data_naixement.Text, d) 
    //Aquí escribes un mensaje de error indicando que el formato de la fecha es invalido.
    }
    Saludos,

    Gracias Sandro,

    veo que no mke he explicado del todo bien,

    mi caso es que' por ejemplo para realizar los calculos' tengo una variable  tipo Date i le quiero pasar lo que me muestra el  tx_data_naixement, no se si lo mejor en mi caso es cargar directamente a traves del Texbox o si hay alguna manera(más facil)  de acceder a este campo a traves del dataset en el Row que tengo cargado en la ventana....

    He provado tu ejemplo partiendo que la vaiable es date i el campo es Date:

       Dim datanaix As Date=tx_data_naixement  y me genera el error:

    Error    1    Un valor de tipo 'System.Windows.Controls.TextBox' no se puede convertir en 'Date'.

    tambien he provado con el conversor que tambien me genera error cuando cargo:

    Dim datanaix As Date = Convert.ToDateTime(tx_data_naixement)



    Fijate que aca no estas haciendo la conversión como estaba en mi ejemplo.

    A continuación te pego todo un código de ejemplo:

    XAML

    <Window x:Class="Window1"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:d="Demo"
      Title="Window1" Height="162" Width="300" Name="Window1">
      <Grid Height="125">
        <TextBox Margin="12,24,12,0" Name="tx_data_naixement" Text="{Binding Path=fecha_nacimiento, Mode=TwoWay}" Height="32" VerticalAlignment="Top" />
        <Label Height="28" HorizontalAlignment="Left" Margin="8,62,0,0" Name="Label1" VerticalAlignment="Top" Width="120">Edad
        </Label>
        <TextBox Height="23" Margin="12,85,12,0" Name="TextBox1" Text="{Binding Path=Edad, Mode=OneWay}" VerticalAlignment="Top" />
        <Label Height="26" HorizontalAlignment="Left" Margin="12,0,0,0" Name="Label2" VerticalAlignment="Top" Width="120">Fecha de nacimiento</Label>
      </Grid>
    </Window>
    

    CodeBehind

    Imports System.ComponentModel
    
    Public Class Window1
      Dim d As Demo
      Private Sub Window1_Loaded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded
        d = New Demo
        Me.DataContext = d
      End Sub
    End Class
    
    Public Class Demo
      Implements INotifyPropertyChanged
      Dim d As Date = New Date(1977, 10, 10)
      Dim _edad As Integer
      Public Property fecha_nacimiento() As DateTime
        Get
          Return d
        End Get
        Set(ByVal value As DateTime)
          'Aca está el TryParse. Lo que hace esto es que si el valor se puede convertir en
    'un valor Date, lo convierte y lo pone en la variable d. Si no lo puede convertir
    'No se lo asigna a la variable, antes del Return podrías hacer algo que necesites
    'o disparar un mensaje de error.
    If (Not DateTime.TryParse(value, d)) Then Return End If Edad = Math.Abs(DateDiff(DateInterval.Year, Now, d)) NotifyPropertyChanged("fecha_nacimiento") End Set End Property Public Property Edad() As Integer Get Return _edad End Get Set(ByVal value As Integer) _edad = value NotifyPropertyChanged("Edad") End Set End Property ' Declare the PropertyChanged event Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged ' NotifyPropertyChanged will raise the PropertyChanged event passing the ' source property that is being updated. Public Sub NotifyPropertyChanged(ByVal propertyName As String) RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propertyName)) End Sub End Class

    Saludos,


    Sandro D. Garcia
    MCTS: .NET Framework 4, Windows Applications.
    Colabora con el foro: Si este mensaje te es de utilidad marcalo como respuesta.
    -----
    Please, if this message helps you, remember mark it as response, may be can help more people with same problem.
    -----
    Mi Blog
    Tuesday, June 29, 2010 3:40 PM
  • hola Gracias Sandro por tu profusa  y trabajada respuesta

    con 'maestros' como tu me doy cuenta que no se nada..

    a ver..

    tu codigo lo entiendo pero

    si lo enlazo con la ventana:

    Dim d As Date = New Date(tx_data_naixement.Text) 
    me generan errores de conversion al ejecutar

     

    Tuesday, June 29, 2010 10:04 PM
  • En que momento te da esos errores?

    Estimo que el problema es que ese textbox seguramente contiene un valor que no es válido. Antes de instanciar el esa variable, tendrías que asegurarte que el textbox tiene una fecha válida, ya sea utilizando el tryparse o asegurandote con un customvalidator que la fecha es válida.

    Otra buena opción es ponerle al textbox una regular expresion para que solo te permita ingresar un valor con formato fecha.

    Saludos,


    Sandro D. Garcia
    MCTS: .NET Framework 4, Windows Applications.
    Colabora con el foro: Si este mensaje te es de utilidad marcalo como respuesta.
    -----
    Please, if this message helps you, remember mark it as response, may be can help more people with same problem.
    -----
    Mi Blog
    Tuesday, June 29, 2010 11:27 PM
  • Hola Sandro,

    quizas si,

    esta tabla la comence en access y la migre a SQL SERVER y quizás el formato no serà el correcto.

    Esta noche me lo miro,

    Gracias.

    Wednesday, June 30, 2010 12:22 PM
  • El error me sale en esta linea al ejecutar:

        Dim d As Date = New Date(tx_data_naixement.Text)

     y el error es al darle con el boton derecho:

       Conversion from string "" to type 'Long' is not valid. y si poso por encima la variable d tiene: #12:00:00 AM#

    a ver ... no lo entiendo,

    de comprovado la configuracion de la tabla des de sql server y lo tengo declarado DateTime... tambien es cierto que hay algun valor nulo....pero el registro que me carga   si que tiene este campo lleno.

    Gracias

     

    Thursday, July 01, 2010 10:52 PM
  • Aparentemente, al inicializar la variable el texbox tx_data_naixement  esta vacio. Proba reemplazar la línea

    Dim d As Date = New Date(tx_data_naixement.Text)

    por

    Dim d As Date = New Date(Now)

    DateTime.TryParse(tx_data_naixement.Text, d)

    y aca fijate que valor tiene el DateTime. Yo estoy seguro que el problema es que al inicializarse el form, como el textbox no tiene ningún valor, al querer inicializar una fecha te da error.

    Saludos

     


    Sandro D. Garcia
    MCTS: .NET Framework 4, Windows Applications.
    Colabora con el foro: Si este mensaje te es de utilidad marcalo como respuesta.
    -----
    Please, if this message helps you, remember mark it as response, may be can help more people with same problem.
    -----
    Mi Blog
    • Marked as answer by Spandau Tuesday, July 06, 2010 11:37 AM
    Friday, July 02, 2010 4:58 AM
  • gracias...

    me pasa algo raro... esta niche me lo miraré con mas atencion... con  el valor now me sale el error:Error    1    Un valor de tipo 'Date' no se puede convertir en 'Long'.

    No se de donde sale este Long.... despues me lo miro...

     

    Friday, July 02, 2010 12:28 PM
  • Hola Sandro,

    con tu codigo estoy en las mismas..

    Dim d As Date = New Date(Now)

    DateTime.TryParse(tx_data_naixement.Text, d)

    Error    1    Un valor de tipo 'Date' no se puede convertir en 'Long'.   

     

    Unicamente evito este error si lo hago asi:

    Dim d As Date = Now

    si hago New.... me genera el error mencionado arriba

    Friday, July 02, 2010 11:31 PM