Conectar un ComboBox a dos datasets en C#
Jun 19, 11:00 AM
Jun 19, 11:00 AM
Un problemilla que se me ha dado ultimamente: como alimentar un combobox en C# para que recoja los datos a seleccionar de una tabla en un dataset pero almacene o recupere los datos seleccionados en otro. Un ejemplo vale mas que mil palabras.
Tenemos dos tablas, una Departamentos y otra Puestos. Un Puesto puede ser ‘Responsable de departamento’, para lo cual almacena un campo numerico con el código de departamento.
Queremos que el combobox muestre todos los departamentos almacenados en la tabla, pero que el valor seleccionado sea el correspondiente al registro correspondiente de la tabla Puestos. Por razones de diseño de la capa de datos, tenemos ambas tablas almacenadas en datasets distintos, dsDeptos y dsPuest. El dataset correspondiente a la tabla Puestos está conectado a un objeto BindingSource que alimenta al formulario (BindingSource1).
La tabla Departamentos tiene los campos CodDepto y NombreDepto que identifican los mismos. El departamento tiene su correspondiente en Puesto mediante el campo RespDepto.
El ComboBox se llamará Combo1.
Bien, la forma de hacerlo es:
Combo1.DataSource:dsDeptos
Combo1.DisplayMember:Table.NombreDepto
Combo1.ValueMember:Table.CodDepto
con esto alimentamos los items del combo.
Combo1.SelectedValue:BindingSource1-RespDepto
o en código
Combo1.DataBindings.Add(new System.Windows.Forms.Binding("SelectedValue", this.BindingSource1, "RespDepto", true));
Combo1.DataSource = dsDeptos;
Combo1.DisplayMember = "Table.NombreDepto";
Combo1.ValueMember = "Table.CodDepto";
Y eso es todo amigos
Comentarios [3]
Enviador de correo .NET
Feb 6, 12:25 AM
Feb 6, 12:25 AM
A modo de hobby y sin prisas estoy creando una aplicación de gestión para asociaciones. La idea es crer una aplicación en Linux, pero a ser posible portable a Windows, de manera que se favorezca el paso de una plataforma a otra cuando sea conveniente. Para ello había escogido la plataforma .NET, pues a raíz de un curso, descubrí la programación en C#, que es verdaderamente cómoda, y opté por esta para mi aplicación.
Cierto es que uno proviene del mundo Windows, pero descubro y admiro la opción Linux cada vez mas. Después de unos primeras pruebas con SharpDevelop y MySql, descubrí el proyecto Mono, que traslada la plataforma .NET a Linux. Ni corto de perezoso, me he puesto a elaborar uno de los módulos de mi aplicación con Mono, la librería de envío de correo. Junto a esta, una aplicación de prueba que se terminado por convertir en una utilidad por si misma (utilidad dudosa, eso si, como no sea para testear cuentas) que consiste en un programa enviador de correos electrónicos.
Tal cual habeis leido, no se trata de un gestor de correo, es mucho mas simple. Un programa que permite, introduciendo los datos del servidor SMTP, envíar directamente un correo (con datos adjuntos), mostrando una consola con las peticiones y respuestas del servidor.
El programa precisa de Mono 1.1.13 para correr en Linux. Para Windows, funciona tanto con la misma versión de Mono o con el .Net Framework de Windows junto al runtime de GTK# versión 2.7.1
Podeis descargar tanto la librería de cliente smtp, el ejecutable y las fuentes en la seccion de recursos
De nuevo en mono
Feb 5, 11:25 PM
Feb 5, 11:25 PM
Bueno, con la versión 1.1.13 de mono se arreglan muuchas cosas. Por lo pronto, la portabilidad de programas hechos en Linux a Windows mejora (especialmente con la última versión del runtime de GTK#). Por lo tanto me he puesto a programar y he culminado mi pequeño experimento, el cual prefiero comentar en un artículo aparte.
De C# a C++
Jan 7, 01:00 AM
Jan 7, 01:00 AM
Parece raro ¿no? El caso es que estoy desarrollando desde Linux una aplicación que quiero que corra tanto en este como en Windows. Comencé a desarrollarla bajo Mono 1.1.10 y Gtk#, usando glade. Después de una par de ajustes, y de enterarme un poco como se aplica el proyecto de glade al monodevelop, las primeras pruebas iban bien… bajo Linux.
Cual ha sido mi sorpresa cuando, al intentar ejecutar en Windows, ha empezado a darme errores por todos lados. Me bajé el runtime del Gtk# para Windows desde la web de novell, lo instalo y empiezo a probar. Errores al ejecutar desde .net ¿? no encuentra ensamblados del gtk# ¿?¿?. Copio a mano los ensamblados al GAC del .net y nada… Probamos con mono para windows… Bien, crea la ventana, le damos al botoncito… puf, error con ICSharpCode :(((
El caso es que, leyendo de foro en foro, me he desencantado un poco con el mono este. El C# es un lenguaje muy mono, ágil, versátil y con un montón de funcionalidades, pero no parece estar maduro para programar desde Linux. Así que me he encargado a la tienda un libro de Gtk+/Gdk y voy a investigar las aplicaciones con c++. Por ahí encontré un tutorial para portar aplicaciones gtk a Windows que pienso poner en práctica.
De momento, espero poner a vuestra disposición pronto,en la sección de Recursos, las primeras pruebas de librerias y un mini programa de envío de correos, tanto con c++ como bajo .net.
Compilar con g++
Jan 7, 12:29 AM
Jan 7, 12:29 AM
He estado haciendo unas pruebas con el g++, refrescando conocimientos de compilación... El caso es que crear un programa con Anjuta y Glade está muy bien, pero ¿como se hacía en plan básico?. Bien, pues este ejemplo es de prácticas de la carrera.
- Creamos las definiciones de nuestras clases en sus correspondientes ficheros .h
/*******************/
/* miclase.h */
/*******************/
class miclase
{
public:
void escribe();
}; - Introducimos el código en el correspondiente fichero .cc
/*******************/
/* miclase.cc */
/*******************/
#include <iostream>
#include "./miclase.h"
using std::cout;
using std::cin;
using std::endl;
void miclase::escribe()
{
cout << "Hola mundo" << endl;
}
- Creamos la funcion main en el fichero idem
/*******************/
/* main.cc */
/*******************/
#include "./miclase.h"
#include <iostream>
int main()
{
miclase m;
m.escribe();
std::cout << "Bieeeeen" << std::endl;
return(0);
}
- Compilamos con g++ incluyendo los .cc, pero no los .h
g++ miclase.cc main.cc -o miclase.bin
Es importante el tema de los includes. En cada archivo .cc, es necesario incluir aquellas cabeceras necesarias, sin darse por incluidas por otros archivos .cc. El iostream de main.cc es necesario para usar std::cout , y hay que ponerlo aunque aparezca en miclase.cc. En cambio, no sería necesario si estuviese incluido en miclase.h .
Por otro lado, si quisieramos abreviar en archivos, siempre podríamos incluir el código de los métodos de la clase en el archivo de cabecera y evitarnos el miclase.cc .
Comentarios [2]
