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
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"));