Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: irvincnt93 en 20 Agosto 2015, 00:01 am



Título: como mostrar todas las columnas AUN con valores null
Publicado por: irvincnt93 en 20 Agosto 2015, 00:01 am
hola familia tengo un problema al momento de mostrar una tabla de mi base de datos en un datagridview en C#. les especifico un poco mejor.

tengo una tabla con nombre Actas.
-----------------------------------------------------------------------------
  id_acta | id_dpto | id_mate | ...... | grupo | clave | folio | ruta |
-----------------------------------------------------------------------------

todas las columnas deben de tener datos (not null) pero la de clave y folio, algunos campos puede que tengan o no tengas (null).

ahora tengo en mi aplicación en C# una clase que me carga la tabla Actas, si en mi tabla tengo filas que no tiene celdas nulas si me muestra todo como debe de ser, pero al momento de agregar una fila con la celda en clave y folio nulo (null) al momento de darle clic en mostrar actas, me genera un error que dice:

Citar
An unhandled exception of type 'System.IndexOutOfRangeException' occurred in System.Data.dll

Additional information: clave


les muestro la clase que carga todas mis Actas

Código:

public void cargarActas(String Filtro)
        {
            SqlDataReader dr;
            string cadenaconexion = @"Data Source=IRONGIO-PC;Initial Catalog=itiz;Integrated Security=True";
            SqlConnection conexion = new SqlConnection();
            SqlCommand comando = new SqlCommand();

            conexion.ConnectionString = cadenaconexion;
            comando.Connection = conexion;
            comando.CommandText = "select idacta, PE.nombrePeriodo, DE.nombreDpto, MA.nombreMateria, PR.nombreProfesor, TS.nombreTipoSemestre, grupo, clave, folio, ruta" +
                                   " from Actas A join Periodos PE on A.idperi = PE.idperi" +
                                   " join Departamentos DE on A.iddpto = DE.iddpto" +
                                   " join Materias MA on A.idmate = MA.idmate" +
                                   " join Profesores PR on A.idprofe = PR.idprofe" +
                                   " join TipoSemestre TS on A.idtiposem = TS.idtiposem WHERE 1=1 " + Filtro;

            comando.CommandType = CommandType.Text;
            conexion.Open();
            dgvActas.Rows.Clear();
            dr = comando.ExecuteReader();


            while (dr.Read())
            {
                int renglon = dgvActas.Rows.Add();
                dgvActas.Rows[renglon].Cells["id_acta"].Value = dr.GetInt32(dr.GetOrdinal("idacta")).ToString();
                dgvActas.Rows[renglon].Cells["id_peri"].Value = dr.GetString(dr.GetOrdinal("nombrePeriodo"));
                dgvActas.Rows[renglon].Cells["id_dpto"].Value = dr.GetString(dr.GetOrdinal("nombreDpto"));
                dgvActas.Rows[renglon].Cells["id_mate"].Value = dr.GetString(dr.GetOrdinal("nombreMateria"));
                dgvActas.Rows[renglon].Cells["id_profe"].Value = dr.GetString(dr.GetOrdinal("nombreProfesor"));
                dgvActas.Rows[renglon].Cells["id_tiposem"].Value = dr.GetString(dr.GetOrdinal("nombreTipoSemestre"));
                dgvActas.Rows[renglon].Cells["grupo"].Value = dr.GetString(dr.GetOrdinal("grupo"));
                dgvActas.Rows[renglon].Cells["clave"].Value = dr.GetString(dr.GetOrdinal("clave"));
                dgvActas.Rows[renglon].Cells["folio"].Value = dr.GetString(dr.GetOrdinal("folio"));
                dgvActas.Rows[renglon].Cells["ruta"].Value = dr.GetString(dr.GetOrdinal("ruta"));
            }


            conexion.Close();
        }

buscando como arreglar el error encontré  que los valores nulos tengo que sustituilos por otra palabra para poder mostrarlos, lo que intente fue poner esta sentencia selec:

Código:
comando.CommandText = "select idacta, PE.nombrePeriodo, DE.nombreDpto, MA.nombreMateria, PR.nombreProfesor, TS.nombreTipoSemestre, grupo, ISNULL(clave,'vacio'), ISNULL(folio,'vacio'), ruta" +
                                   " from Actas A join Periodos PE on A.idperi = PE.idperi" +
                                   " join Departamentos DE on A.iddpto = DE.iddpto" +
                                   " join Materias MA on A.idmate = MA.idmate" +
                                   " join Profesores PR on A.idprofe = PR.idprofe" +
                                   " join TipoSemestre TS on A.idtiposem = TS.idtiposem WHERE 1=1 " + Filtro;

así como lo tengo en esta sentencia si me voy al gestor de BD y ejecuto esta sentencia, me salen todos los datos como los quiero, pero al momento de ponerlo en el código me genera el comentario del error que les puse arriba.

entonces pienso que el error esta aqui pero no se como arreglarlo

Código:
dgvActas.Rows[renglon].Cells["clave"].Value = dr.GetString(dr.GetOrdinal("clave"));
dgvActas.Rows[renglon].Cells["folio"].Value = dr.GetString(dr.GetOrdinal("folio"));


Título: Re: como mostrar todas las columnas AUN con valores null
Publicado por: berni69 en 20 Agosto 2015, 16:32 pm
antes de hacer el GetString compara con null y con dbnull (ahora no recuerdo el tipo que devolvia el dr)