Ayuda con DataGridView

Iniciado por bitaziko, 23 Diciembre 2011, 10:46 AM

0 Miembros y 1 Visitante están viendo este tema.

bitaziko

Hola Hackeros.net
esta vez traigo un problemilla que creo es facil resolver pero me he dado cuenta que soy muy bruto y no termino de conseguirlo,
vereis estoy creando una aplicacion para registrar clientes en una base de datos en sqlserver mediante visual studio 2010. todo marcha bien el unico inconveniente es el siguiente

atravez de un form hago los registro en la base de datos, y tengo un mdiparent que en el evento load me carga en un datagridview todos los registros de la BD bien, pues lo que intento conseguir es que una vez que yo presione el boton "guardar" en el formulario se me actualize el datagridview que esta en el mdiparent y me visualize el registro que acabo de guardar.

espero haberme xplicado bien y que me podais ayudar.

gracias de antemano!!!
un saludo!! foreros

y FELIZ NAVIDAD!!!!!! ;-) ;-) ;-)
La Suerte Favorece a los Niños,a los Locos y a las Naves llamadas Enterprise....

Shell Root

Con visualizar quieres decir que se refresque el DataGridView como tal, o que se posicione en el registro ingresado?
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

Novlucker

Debes de actualizar el datasource y disparar el bind

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

bitaziko

Cita de: Shell Root en 23 Diciembre 2011, 12:40 PM
Con visualizar quieres decir que se refresque el DataGridView como tal, o que se posicione en el registro ingresado?

si que se refresque el DataGridView como tal y me muestre el registro que recientemente ingrese.
La Suerte Favorece a los Niños,a los Locos y a las Naves llamadas Enterprise....

bitaziko

Cita de: Novlucker en 23 Diciembre 2011, 12:43 PM
Debes de actualizar el datasource y disparar el bind

Saludos

ok si me pudieras explicar bien el codigo x que no tengo ni idea

he pensado en lo siguiente aunq aun no lo he probado:
como tengo el datagridview en un mdiparent he pensado en esto
Código (vbnet) [Seleccionar]
Private Sub ClientesBindingNavigatorSaveItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ClientesBindingNavigatorSaveItem.Click
        Me.Validate()
        Me.ClientesBindingSource.EndEdit()
        Me.TableAdapterManager.UpdateAll(Me.BasedeDatosDataSet)
        MDIParent1.Refresh()
       
    End Sub



o bien asi:
Código (vbnet) [Seleccionar]
Private Sub ClientesBindingNavigatorSaveItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ClientesBindingNavigatorSaveItem.Click
        Me.Validate()
        Me.ClientesBindingSource.EndEdit()
        Me.TableAdapterManager.UpdateAll(Me.BasedeDatosDataSet)
        MDIParent1.ClientesDataGridView.Refresh()
    End Sub


pero lo dicho no lo he probado aun, he leido lo del bind pero no se exactamente como dispararlo,con respecto al datasoucer al decir actualizar seria "refresh" o "update" por que no lo entiendo dl todo esas acciones...
La Suerte Favorece a los Niños,a los Locos y a las Naves llamadas Enterprise....

Novlucker

¿Como estas asignando el datasource al control? Eso lo tienes que repetir.

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

bitaziko

he probado lo siguiente y en cierto modo me ha funcionado vereis:
Código (vbnet) [Seleccionar]
Private Sub Form2_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArg... Handles MyBase.FormClosing

MDIParent1.midatagrid.datasource = nombredeldatasource
MDIParent1.midatagrid.refresh ()

end sub


bien esto en el formclosing aparentemente funciona
pero cuando agrego el codigo al boton guardar en el formulario lo que hace es que me refresca todo el datagrid poniendolo en blanco....
La Suerte Favorece a los Niños,a los Locos y a las Naves llamadas Enterprise....

24K

Hola bitaziko, yo hice algo así pero en C#, te lo paso de todas maneras haber si lo cambias nada mas.
En primer lugar cree una clase y en la clase un metodo llamado actualizarDataGrid,
en el form_load llamo a ese metodo y tambien cada bes que guardo algo en el evento click del boton Guardar, bueno algo asi:
Código (csharp) [Seleccionar]
public void actualizarDataGrid(DataGridView dtg, string tabla)
        {
            da = new SqlDataAdapter("SELECT * FROM " + tabla, cadena);
            dt = new DataTable();
            da.Fill(dt);
            dtg.DataSource = dt;
        }

Como te das cuenta, es una metodo que no vuelve valores; y necesita dos argumentos, un datagridview y un string; el dataGridView es el que vas a actualizar, y el estring es la tabla que quieres que aparezca en ese dataGridView.
Ahora como utilizo, como ya sabes en la cabecera del codigo de tu formulario declaras la clase asi:
Código (csharp) [Seleccionar]
namespace programacionI
{
    public partial class frmDocente : Form
    {
        public frmDocente()
        {
            InitializeComponent();
        }

        docentes doc = new docentes();
        private bool numero = false;

Si te das cuenta mi clase se llama docentes y estoy declarando un nuevo objeto "doc" del tipo docentes. Ahora como utilizamos el metodos en el form, asi:
Código (csharp) [Seleccionar]
private void frmDocente_Load(object sender, EventArgs e)
        {
            doc.actualizarDataGrid(dtgDocentes, "docentes");
            dtgDocentes.Columns[0].Width = 40;
            dtgDocentes.Columns[1].Width = 255;
        }

ves que en el formulario frmDocentes ni bien abre me va a mostrar en el dataGridView "dtgDocentes" todos los datos ya guardados en la tabla "docentes" de mi base de datos. Ademas cambio el tamaño de las columnas en tiempo de ejecucion.
Ahora agregas un nuevo registro, tienes tu boton "btnGuardar" y le colocas este codigo:
Código (csharp) [Seleccionar]
private void btnGuardar_Click(object sender, EventArgs e)
        {
            if ((txtID.Text != "") && (txtApellidos.Text != ""))
            {
                int codigo = Convert.ToInt16(this.txtID.Text);
                string apellidos = txtApellidos.Text;
                doc.guardarDocente(codigo, apellidos, dtgDocentes);
            }
            else
            {
                MessageBox.Show("Uno o mas campos no fueron llenados", "Error", MessageBoxButtons.OK,
                    MessageBoxIcon.Warning);
            }
            doc.limpiarTextBox(this);
            txtID.Focus();
        }

Como ves verifico que los textBox no esten vacios, Luego capturo el codigo y apellido y los llevo a mi metodo "guardarDocente"; ahi es donde utilizo el metodo"actualizarDatGrid", ya que el codigo de "guardarDocente" es este:
Código (csharp) [Seleccionar]
public void guardarDocente(int codigo, string nombres, DataGridView dtg)
        {
            cnx = new SqlConnection(cadena);
            cmd = new SqlCommand();
            cmd.Connection = cnx;
            cmd.CommandText = "INSERT INTO docentes (iddoc, nomdoc) VALUES (@iddoc, @nomdoc)";
            cmd.Parameters.AddWithValue("@iddoc", codigo);
            cmd.Parameters.AddWithValue("@nomdoc", nombres);
            cnx.Open();
            try
            {
                cmd.ExecuteNonQuery();
                MessageBox.Show("Docente ingresado exitosamente");
                actualizarDataGrid(dtg, "docentes");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            cnx.Close();
        }

Como vez, guardo el codigo y el nombre y apellido del docente, si se guarda bien, llamo al metodo actualizarDataGrid, si no solo sale un mensaje de error. Para que no te compliques (si lo vez complicado) utilizas el metodo actualizarDataGrid aparte en el boton y no en el metodo guardarDocente. No se como poner imagenes de mi Pc, sino te mostraria como hice mi formulario para que te guies.
Espero haberte ayudado, algun dia me dedicare a aprender vb.net