none
Problemas con Data Binding RRS feed

  • Pregunta

  • Hola... he cread un formulario con un combo y una grilla... he hecho lo siguiente

    1.- Cargar en la grilla un listado de clientes en el cual se mostrara una columna llamada codigo que es el codigo de el documento que tiene asignado, ademas de la columna Cliente(que es el codigo del cliente) y el campo descripcion.

    2.- cargar el un combo todos los documentos que existen.

    Lo que intente hacer es crear un enlace con el databinding entre la fuente de datos de la grilla y el combo, de tal manera que al desplazarme por los registros de la grilla, tanto el combo como una caja de texto adicional me muestren el tipo de documento y el codigo del cliente.

    Hasta alli todo bien....

    Luego a tyreves de un boton codifique el metodo

    _oBindingSource.AddNew();

    que me permitio añadir un registro... pero despues de seleccionar un documento en el combo, al perder el enfoque se pierde tambien el valor que se asigno al combo..., en cambio al asignar un valor a la caja de texto (codigo de cliente) este valor se actualiza automaticamente en la celda de la grilla, cosa que no pasa al modificar la seleccion en el combo.

    He etado haciendo pruebas y me he percatado de que si dejo de colocar el campo Codigo de la clase Cliente como un tipo anulable, se logra reparar este inconveniente... mi pregunta es por que pasa esto cuando se coloca un tipo anulable en una clase...a caso es que esto no esta permitido con tipos anulables... no sabria en realidad y es por eso que acudo a ustedes...

    Gracias...

     

    Bueno... aqui he usado algunos controles de DevExpress que son muy buenos....

    Code Snippet

     

    public class Documentos

    {

    private byte _Codigo;

    private string _Descripcion;

     

    public byte Codigo

    {

    get { return this._Codigo; }

    set { this._Codigo = value; }

    }

    public string Descripcion

    {

    get { return this._Descripcion; }

    set { this._Descripcion = value; }

    }

     

     

    }

     

    public class Clientes

    {

    private string _Cliente;

    private byte? _Codigo;

    private string _Descripcion;

     

    public string Cliente

    {

    get { return this._Cliente; }

    set { this._Cliente = value; }

    }

    public byte? Codigo

    {

    get { return this._Codigo.GetValueOrDefault(0); }

    set { this._Codigo = value; }

    }

    public string Descripcion

    {

    get { return this._Descripcion; }

    set { this._Descripcion = value; }

    }

     

     

    }

     

     

    Code Snippet

    public partial class Form1 : Form

    {

    public Form1()

    {

    InitializeComponent();

    }

    private BindingSource _oBindingSource = new BindingSource();

    private void Form1_Load(object sender, EventArgs e)

    {

    _oBindingSource.AllowNew = true;

    lookUpEdit1.Properties.DataSource = TraerData();

    lookUpEdit1.Properties.DisplayMember = "Descripcion";

    lookUpEdit1.Properties.ValueMember = "Codigo";

    _oBindingSource.DataSource = TrarerClientes();

    gridControl1.DataSource = _oBindingSource;

    lookUpEdit1.DataBindings.Add("EditValue", _oBindingSource, "Codigo");

    textEdit1.DataBindings.Add("Text", _oBindingSource, "Cliente");

     

     

    }

     

    private List<Documentos> TraerData()

    {

    using (SqlConnection oCn = new SqlConnection("Server=atenas;database=bd_siscar;uid=sa;Pwd=sa$2008"))

    {

    oCn.Open();

    List<Documentos> ListadoDocumentos = new List<Documentos>();

    SqlCommand oCmd = new SqlCommand();

    oCmd.Connection = oCn;

    oCmd.CommandText = "select CodTipoDocIdentidad , Abreviado from TipoDocumentoIdentidad";

    oCmd.CommandType = CommandType.Text;

    using (SqlDataReader oReader = oCmd.ExecuteReader(CommandBehavior.CloseConnection))

    {

    while (oReader.Read())

    {

    Documentos oDocumentos = new Documentos();

    oDocumentos.Codigo = Convert.ToByte(oReader["CodTipoDocIdentidad"]);

    oDocumentos.Descripcion = Convert.ToString(oReader["Abreviado"]);

     

    ListadoDocumentos.Add(oDocumentos);

    }

    }

    return ListadoDocumentos;

    }

    }

    private List<Clientes> TrarerClientes()

    {

    using (SqlConnection oCn = new SqlConnection("Server=atenas;database=bd_siscar;uid=sa;Pwd=sa$2008"))

    {

    oCn.Open();

    List<Clientes> ListadoDocumentos = new List<Clientes>();

    SqlCommand oCmd = new SqlCommand();

    oCmd.Connection = oCn;

    oCmd.CommandText = "select C.CodCliente , C.CodTipoDocIdentidad, T.Abreviado from Cliente C inner join TipoDocumentoIdentidad T on C.CodTipoDocIdentidad = T.CodTipoDocIdentidad";

    oCmd.CommandType = CommandType.Text;

    using (SqlDataReader oReader = oCmd.ExecuteReader(CommandBehavior.CloseConnection))

    {

    while (oReader.Read())

    {

    Clientes oDocumentos = new Clientes();

    oDocumentos.Codigo = Convert.ToByte(oReader["CodTipoDocIdentidad"]);

    oDocumentos.Descripcion = Convert.ToString(oReader["Abreviado"]);

    oDocumentos.Cliente = Convert.ToString(oReader["CodCliente"]);

    ListadoDocumentos.Add(oDocumentos);

    }

    }

    return ListadoDocumentos;

    }

    }

     

    private void simpleButton1_Click(object sender, EventArgs e)

    {

    _oBindingSource.AddNew();

    }

     

     

    }

     

     

    martes, 11 de marzo de 2008 3:52

Todas las respuestas