Author Topic: duda con tabla  (Read 4439 times)

0 Members and 1 Guest are viewing this topic.

Offline salvynho

  • Sv Jr.
  • **
  • Posts: 87
duda con tabla
« on: December 18, 2010, 08:07:39 pm »
Saludos a todos! quisiera que me orientaran en algo.
Estoy haciendo un sistema academico, con Windows Form y MySql, y pues ya he llegado a la parte de notas. Tengo varias tablas, entre ellas notas y alumnos, lo que estoy tratando de hacer es que en un DataGridView me salgan los campos nombre y apellido de la tabla alumnos y el campo nota de la tabla notas, inicializadas a cero, ya lo hice. Mi problema es que quiero sustituir esos ceros por la nota de cada alumno, lo hice, pero los metodos del datagrid no me lo permiten porque como es una union de tablas, no funciona con union de tablas, solo con tablas individuales.

He googleado un poco y he leido que lo mas recomendable es hacer un procedimiento almacenado y seleccionar los campos que necesito usar y mandarlos todos a una tabla, y operar con ellos. Me gustaria me dieran una orientacion como hacer ese procedimiento almacenado, crear una tabla x y mandar los campos nombre, apellido de alumnos y nota de notas, y modificarlos. O si tienen otra forma mas facil de resolver mi problema, los escucho. de Antemano, Gracias  :thumbsup:

-GoldeN-

  • Guest
Re: duda con tabla
« Reply #1 on: December 18, 2010, 08:14:00 pm »
a ver, entonces tenes 2 tablas... Queres mostrar los resultados en 1 datagridview...

y modificarlos en el datagrid?? o solo mostrarlos y modificarlos desde otro form que ya tenes creado?

Offline salvynho

  • Sv Jr.
  • **
  • Posts: 87
Re: duda con tabla
« Reply #2 on: December 18, 2010, 08:18:29 pm »
exactamente! tengo 2 tablas, alumnos y notas! alumnos contiene los campos nombre y apellidos, y notas el campo nota, inicalizados a cero. lo que quiero hacer es que por medio del datagrid sustituir los ceros por las notas del alumno, pero no puedo porque me manda error que los metodos solo funcionan con una sola tabla, y aqui estoy interactuando con 2 tablas! entonces surgen los procedimientos almacenados, pero no se si hay una manera mas facil de hacerlo! gracias por la ayuda

-GoldeN-

  • Guest
Re: duda con tabla
« Reply #3 on: December 18, 2010, 08:24:35 pm »
y pues si, los mostras en el grid (luego los modificas) pero estos valores los mandas a un arreglo y con el arreglo haces el update en las tablas...

GRID >> Modificar >> Notas & ID del alumno a arreglo >> valores del arreglo actualizan tabla...

no es muy profesional, pero no tengo ni idea sobre procedimientos almacenados xD

Offline salvynho

  • Sv Jr.
  • **
  • Posts: 87
Re: duda con tabla
« Reply #4 on: December 18, 2010, 08:27:45 pm »
yo tampoco no mucho con procedimientos almacenados, pero como te repito, no me permite actualizar porque uso 2 tablas a la vez, y los metodos solo me permiten una tabla. Tambien se me ocurre mandar los campos que uso a una tabla, pero no se como sincronizarlos.  x_x Cualquier ayuda es bien recibida

-GoldeN-

  • Guest
Re: duda con tabla
« Reply #5 on: December 18, 2010, 08:33:04 pm »
yo tampoco no mucho con procedimientos almacenados, pero como te repito, no me permite actualizar porque uso 2 tablas a la vez, y los metodos solo me permiten una tabla. Tambien se me ocurre mandar los campos que uso a una tabla, pero no se como sincronizarlos.  x_x Cualquier ayuda es bien recibida

es que no actualizas en el grid, mi sugerencias es que modifiques sin activar procedimientos en el grid, puedes colocar un boton para llamar al procedimiento...

Llenas el grid con nombres & notas...

Colocas la nota que corresponde a cada alumno...

Pulsas el boton "Hecho" o w/e , este boton te hace el procedimiento de actualizar las notas... Pensando bien, no necesitas el arreglo, solo recorres el datagrid con un for, y le cambias posicion, actualizas segun el ID del alumno... Pero lo haces solo en la tabla notas, no te tendria que dar mayor problema porque no lo haces desde el grid...

Offline salvynho

  • Sv Jr.
  • **
  • Posts: 87
Re: duda con tabla
« Reply #6 on: December 18, 2010, 08:40:23 pm »
me haz dado una buena idea! gracias, voy a probar! no se si me puedes orientar como puede ir ese for, creeme no domino mucho los datagrid, menos recorrerlo asi. Gracias por la ayuda compañero

Offline salvynho

  • Sv Jr.
  • **
  • Posts: 87
Re: duda con tabla
« Reply #7 on: December 18, 2010, 08:48:13 pm »
te pongo como actualizo los datagrid

        private void getData(string selectedCommand)
        {
            MySqlConnection cn = new MySqlConnection("server=localhost; user id=root; password=name; database=xxx; pooling=false;");
            data = new MySqlDataAdapter(selectedCommand, cn);
            MySqlCommandBuilder builder = new MySqlCommandBuilder(data);
            DataTable table = new DataTable();
            table.Locale = System.Globalization.CultureInfo.InvariantCulture;
            data.Fill(table);
            source.DataSource = table;
            gridNotas.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCellsExceptHeader);

        }

        private void btnVerAlumnos_Click(object sender, EventArgs e)
        {
            try
            {
                getData ("select distinct nombresAlumno, apellidosAlumno, nota from (alumnos inner join notas on " + cbxIdGrado.SelectedValue.ToString() + " = notas.idgrados) inner join materias on " + cbxIdMateria.SelectedValue.ToString() + " = notas.idmaterias inner join periodos on " + cbxIdPeriodo.SelectedValue.ToString() + " = notas.idmaterias inner join  evaluacion on " + cbxIdEvaluacion.SelectedValue.ToString() + " = notas.idevaluacion");
                gridNotas.DataSource = source;
            }
            catch (Exception ex)
            {
                MessageBoxEx.EnableGlass = false;
                MessageBoxEx.Show("No existe este Alumno", ex.Message);
            }
        }

        private void btnCambiarNota_Click(object sender, EventArgs e)
        {
            data.Update((DataTable)source.DataSource);
        }

        private void Mostrar_Click(object sender, EventArgs e)
        {
            getData(data.SelectCommand.CommandText);
        }

alli si lo corro me tira error que no puedo usar tablas unidas, solo una. Nose si me puedes orientar si hay otra manera de actualizar los datagrid! de antemano, gracias

Offline tekun

  • -^- Elite Silver -^-
  • The Communiter-
  • *
  • Posts: 3221
  • Han convertido mi casa en cueva de mercaderes!!!!
    • www.tekun.es
Re: duda con tabla
« Reply #8 on: December 20, 2010, 11:58:16 am »
porque no cambias la lógica del ingreso de datos...

imagino que un alumno tiene más de una materia, de las cuales también necesita sus notas.

porque no trabajas con dos gridView; uno para los alumnos, y otro inmediato inferior, con las notas de este... y así sólo actualizas el segundo gridView, que ya correspondería a una única tabla "notas"... para que te ahorres esfuerzo y trabajo.

así, al seleccionar un alumno del gridView(Alumnos), abajo(segundo gridView), se muestren todas las materias, sólo para actualizar la nota correspondiente; y el Update se lanza sólo sobre el segundo gridView  :)
lo difícil lo hago rápido, con lo imposible, casi siempre me tardo un poquito

Offline tekun

  • -^- Elite Silver -^-
  • The Communiter-
  • *
  • Posts: 3221
  • Han convertido mi casa en cueva de mercaderes!!!!
    • www.tekun.es
Re: duda con tabla
« Reply #9 on: December 21, 2010, 08:36:43 am »
noooombre ya tengo una verdadera solución...

uta, ayer andaba desconectado, justo en la noche cuando estaba llegando a mi casa y tome las llaves de mi pantalón, me recorde de la solución que tenía para tu problema XD que alguién me explique como es que funciona este mi cerebro que al rato reacciona  :phew:


vaia, tu problema es que al gridview queres pegarle el nombre del alumno... como dije antes, creo que tenes más de dos tablas, creo que son estas: "alumnos, notas y materias"...

tu problema es actualizar en la tabla "notas"... ok, haz el select directo a la tabla notas, sólo a esa, imagino un esquema +/- así: "codigo_alumno, codigo_materia, nota"

así haz el select y ese pegale al gridview, pero hazlo... haz que sólo este presente la tabla notas en el gridView y que puedas actualizar de esta manera, modifica los valores y haz funcionar el UpdateCommand... cuando eso ya funcione implementa lo que sigue a continuacion....


ahora bien, para ponerle el nombre del alumno, es sencillo... create las tres columnas en el gridView, pero la primer columna "codigo_alumno" hacela del tipo ComboBox, luego pobla esa columna con la tabla alumnos, así:
Quote
            Dim _Adapter As New Npgsql.NpgsqlDataAdapter("select codigo_alumno,nombre from alumnos", _Con)
            Dim _Table As New DataTable
            _Adapter.Fill(_Table )

            Dim lste As DataGridViewComboBoxColumn = DirectCast(gridView.Columns("colCodigoAlumno"), DataGridViewComboBoxColumn)
            lste.DataSource = _Table
            lste.DisplayMember = "nombre"
            lste.ValueMember = "codigo_alumno"

obviamente este código esta en vb, pero fácilmente cambiarlo a C, aparte de esto, este post debería estar en el subforo de C, no en este de base de datos, como ya debiste haberte dado cuenta, la base de datos no es tu problema

en fin, ese código pegalo antes de poblar el gridView con la tabla notas, así te aparecerá el nombre del alumno, en lugar del código.. sencillo y óptimo para tus resultados...

además en mi ejemplo, debes cambiar el controlador, por el que estas usando de mysql, de ahí, sigue usando el updateCommand de la tabla notas..

ahora, sólo falta que le pongas el nombre a las Materias, pero creo que ahora ya sabes como hacerlo, suerte  :thumbsup:
lo difícil lo hago rápido, con lo imposible, casi siempre me tardo un poquito

Offline salvynho

  • Sv Jr.
  • **
  • Posts: 87
Re: duda con tabla
« Reply #10 on: December 21, 2010, 09:34:42 am »
muchas gracias compañero! me funciono a la primera  :sur: