Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: Beowulf en 10 Marzo 2010, 00:48 am



Título: C# 3 - SQL Server 2008 - binding en textbox
Publicado por: Beowulf en 10 Marzo 2010, 00:48 am
Saludos a todo:
 les comento estoy realizando una aplicacion (basica), realizo la conexion con el servidor usando SqlDataAdapter y SqlConnection, por medio de un comando cargo un dataset con dos tablas, lugo cree una ralacion todo a travez de codigo (dataset no tipado), cuando lo voy a usar todo funciona, un bindingNavigator, dos  BindingSource unidos, pero cuando en un textbox quiero mostar un campo del segundo BindingSource, que tiene la relacion , se desabilita, pero si esto lo hago con un dataGridView funciona perfecto, pero quiero usar el textbox.
Al textbox lo uso de la siguiente manera:
txtNombre.DataBindings.Add(new Binding("Text", Obra.bindingSource1, "eccod", true))
Cualquier ayuda es bien recibida.


Título: Re: C# 3 - SQL Server 2008 - binding en textbox
Publicado por: MANULOMM en 10 Marzo 2010, 03:26 am
Aparentemente todo esta bien, muestrame el code del form para ver mejor el fallo...

Atentamente,

Juan Manuel Lombana
Medellín - Colombia


Título: Re: C# 3 - SQL Server 2008 - binding en textbox
Publicado por: Beowulf en 10 Marzo 2010, 12:58 pm
Este fue mi ultimo intento:
//FORM con dos dos dataGrid y tres textbox
    public partial class ObraAltas : Form
    {
        private Dax Obra;
        public ObraAltas()
        {
            Obra = new Dax();
            Obra.conection();
            InitializeComponent();
           
            Obra.LeerDatos2("SELECT medmat,mednom,medecv FROM Medicos ","MEDICOS");
            Obra.LeerDatos2("SELECT eccod,ecestado,descrp FROM Ecivil", "ESTACV");
        }

        private void ObraAltas_Load(object sender, EventArgs e)
        {
            Carga();
        }
        private void Carga()
        {
            DataColumn DCPadre = Obra.daxDataSet.Tables["ESTACV"].Columns["eccod"];
            DataColumn DCHijo = Obra.daxDataSet.Tables["MEDICOS"].Columns["medecv"];
            DataRelation Ralation = Obra.daxDataSet.Relations.Add("DAX", Obra.daxDataSet.Tables["ESTACV"].Columns["eccod"], Obra.daxDataSet.Tables["MEDICOS"].Columns["medecv"]);
            BindingSource RelBindinSource = new BindingSource();
            RelBindinSource.DataSource = Obra.bindingSource1;
            Obra.bindingSource1.DataSource = Obra.daxDataSet;
            Obra.bindingSource1.DataMember = "ESTACV";
            RelBindinSource.DataMember = "DAX";

           
            txtNombre.DataBindings.Add(new Binding("Text", Obra.bindingSource1, "eccod", true));
            txtLoc.DataBindings.Add(new Binding("Text", Obra.bindingSource1, "ecestado", true));
            dataGridView1.DataSource = Obra.bindingSource1;
            //FUNCIONA
            dataGridView2.DataSource = RelBindinSource;
            //
            //NO FUNCIONA   
            txtPrueba.DataBindings.Add(new Binding("Text", RelBindinSource, "eccod", true));
            //
            bindingNavigator1.BindingSource = Obra.bindingSource1;
                   
        }

    }

Para buscar el error construi una clase y despeje dinstintas funciones que teoricamente me seria utiles despues
las función leer datos esta en la case Dax y tiene el siguiente codigo:

public void LeerDatos2(string strSQL, string strTabla)
        {
            this.daxAdapter = new SqlDataAdapter(strSQL, this.cnSql);
            SqlCommandBuilder cb = new SqlCommandBuilder(this.daxAdapter);
            cb.QuotePrefix = "[";
            cb.QuoteSuffix = "]";
            this.daxAdapter.UpdateCommand = cb.GetUpdateCommand();
            this.daxAdapter.InsertCommand = cb.GetInsertCommand();
            this.daxAdapter.DeleteCommand = cb.GetDeleteCommand();

            this.daxAdapter.Fill(this.daxDataSet, strTabla);
            this.bindingSource1.DataSource = this.daxDataSet;
     
        }
Las tablas estan bien (creo), al igual que las conexiones por eso no incluyo el codigo


Título: Re: C# 3 - SQL Server 2008 - binding en textbox
Publicado por: raul338 en 10 Marzo 2010, 13:29 pm
Código
  1.        private void ObraAltas_Load(object sender, EventArgs e)
  2.        {
  3.            Carga();
  4.        }
  5.        private void Carga()
  6.        {
  7.            DataColumn DCPadre = Obra.daxDataSet.Tables["ESTACV"].Columns["eccod"];
  8.            DataColumn DCHijo = Obra.daxDataSet.Tables["MEDICOS"].Columns["medecv"];
  9.            DataRelation Ralation = Obra.daxDataSet.Relations.Add("DAX", Obra.daxDataSet.Tables["ESTACV"].Columns["eccod"], Obra.daxDataSet.Tables["MEDICOS"].Columns["medecv"]);
  10.  
  11.            /// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  12.            BindingSource RelBindinSource = new BindingSource();
  13.            /// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  14.  
  15.            RelBindinSource.DataSource = Obra.bindingSource1;
  16.            Obra.bindingSource1.DataSource = Obra.daxDataSet;
  17.            Obra.bindingSource1.DataMember = "ESTACV";
  18.  
  19.            RelBindinSource.DataMember = "DAX";
  20.  
  21.  
  22.            txtNombre.DataBindings.Add(new Binding("Text", Obra.bindingSource1, "eccod", true));
  23.            txtLoc.DataBindings.Add(new Binding("Text", Obra.bindingSource1, "ecestado", true));
  24.            dataGridView1.DataSource = Obra.bindingSource1;
  25.            //FUNCIONA
  26.            dataGridView2.DataSource = RelBindinSource;
  27.            //
  28.            //NO FUNCIONA    
  29.            txtPrueba.DataBindings.Add(new Binding("Text", RelBindinSource, "eccod", true));
  30.            //
  31.            bindingNavigator1.BindingSource = Obra.bindingSource1;
  32.  
  33.        }
  34.  
  35.    }
  36.  

Usa las etiquetas code :P ([ code=charp ])

Nose, pero para mi seria que el DataBinding se destruye al terminar el metodo carga, el datagrid lo "copia" en cambio el textbox pierde la referencia porque se borro de la memoria (al menos eso pasa en otros ambitos)

Lo que si, declararia el Binding Source en el formulario y no en los metodos. quedando algo asi:

Código
  1.        /// Siempre queda "vivo"
  2.        BindingSource RelBindinSource = new BindingSource();
  3.  
  4.        private void ObraAltas_Load(object sender, EventArgs e)
  5.        {
  6.            Carga();
  7.        }
  8.        private void Carga()
  9.        {
  10.            DataColumn DCPadre = Obra.daxDataSet.Tables["ESTACV"].Columns["eccod"];
  11.            DataColumn DCHijo = Obra.daxDataSet.Tables["MEDICOS"].Columns["medecv"];
  12.            DataRelation Ralation = Obra.daxDataSet.Relations.Add("DAX", Obra.daxDataSet.Tables["ESTACV"].Columns["eccod"], Obra.daxDataSet.Tables["MEDICOS"].Columns["medecv"]);
  13.            RelBindinSource.DataSource = Obra.bindingSource1;
  14.            Obra.bindingSource1.DataSource = Obra.daxDataSet;
  15.            Obra.bindingSource1.DataMember = "ESTACV";
  16.  
  17.            RelBindinSource.DataMember = "DAX";
  18.  
  19.  
  20.            txtNombre.DataBindings.Add(new Binding("Text", Obra.bindingSource1, "eccod", true));
  21.            txtLoc.DataBindings.Add(new Binding("Text", Obra.bindingSource1, "ecestado", true));
  22.            dataGridView1.DataSource = Obra.bindingSource1;
  23.            //FUNCIONA
  24.            dataGridView2.DataSource = RelBindinSource;
  25.            //
  26.            // deberia funcionar :P
  27.            txtPrueba.DataBindings.Add(new Binding("Text", RelBindinSource, "eccod", true));
  28.            //
  29.            bindingNavigator1.BindingSource = Obra.bindingSource1;
  30.  
  31.        }
  32.    }
  33.  

Al menos es eso desde mi punto de vista, tendria que probar


Título: Re: C# 3 - SQL Server 2008 - binding en textbox
Publicado por: Beowulf en 10 Marzo 2010, 15:36 pm
Se me paso lo de code=csahrp


Título: Re: C# 3 - SQL Server 2008 - binding en textbox
Publicado por: Beowulf en 10 Marzo 2010, 15:41 pm
Discupen por hacer la cosas rapido las hice mal.  :-[
Esto es lo que quise postear:
raul338  los cambios que me sugeriste los probe, queda mejor el codigo pero no resolvio el problema, pero mi hizo revizar mejor el codigo y encontre la falla, estoy acostumbrado a otros leguajes que al hacer una relacion quedan todos los campos de las tablas relacionadas (si se lo indica asi en SQL) asumi que seria igual: txtPrueba.DataBindings.Add(new Binding("Text", Obra.RelBindinSource, "CAMPO", true))El campo que estaba usando pertenecia a la tabla principal y no a la tabla relacionada, cuando puse un campo de la segunda tabla todo funciono perfactamente. Gracias por la ayuda


Título: Re: C# 3 - SQL Server 2008 - binding en textbox
Publicado por: raul338 en 10 Marzo 2010, 18:37 pm
:) para eso estamos en el foro, para ayudar y que nos ayuden

En cuanto lo del doble post, tienes el boton modificar arriba de los ultimos mensajes tuyo para evitarlos, ya sea agregar cosas, editar accidentes o simplemente decir que lo editaste xD


Título: Re: C# 3 - SQL Server 2008 - binding en textbox
Publicado por: Beowulf en 10 Marzo 2010, 23:45 pm
Gracias