Primero tengo estructurado un proyecto en capas Entidades, Acceso a datos , logica y presentacion, la idea es tener una consulta que se muestre en una grilla y luego exportarla a txt o excel. primero defino mis proyectos y sus dependencias, acontinuación copia las clases creadas que te permiten que las listas acepten valores nulos-
acontinacion la clase entidad matricula, ojo la clase matricula es un ejemplo mas, no se relaciona en mucho con la presentacion de la imagen anterior
Capa Entidades
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace rSunat.ReportesSunat.Entidades
{
public class Matricula
{
public int mat_Cod {get; set;}
public DateTime Fecha{get; set;}
public int Per_Cod {get; set;}
public int TipMat_Cod {get; set ;}
public int Especialidad_Cod { get; set; }
public int Ciclo_Cod {get; set;}
public int Semestre_Cod { get; set; }
public int Turno_Cod {get; set;}
//public int? Mat_tip = null;
private Nullable<Int32> _Mat_tip;
public Nullable<Int32> Mat_tip
{
get { return _Mat_tip; }
set { _Mat_tip = value; }
}
public int Mat_Condicion {get; set;}
public int Mar_Estado { get; set; }
}
}
Está es la Capa acceso a datos
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using rSunat.ReportesSunat.Entidades;
using System.Data;
using System.Data.SqlClient;
namespace rSunat.ReportesSunat.AccesoDatos
{
public class MatriculaAD
{
public List<Matricula> ListarMatricula()
{
SqlConnection conexion = new SqlConnection("Data Source=servidor ;Initial Catalog=db_matricula; User=ejemplo; Password=123654; Connect Timeout=60000");
SqlCommand comando = conexion.CreateCommand();
comando.CommandType = CommandType.StoredProcedure;
comando.CommandText = "sp_Matricula_lst2";
comando.CommandTimeout = 0;
List<Matricula> matriculas = new List<Matricula>();
try
{
conexion.Open();
SqlDataReader datos = comando.ExecuteReader(CommandBehavior.CloseConnection);
while (datos.Read())
{
Matricula oMatricula = new Matricula();
oMatricula.mat_Cod = datos.GetInt32(datos.GetOrdinal("mat_Cod"));
oMatricula.Fecha = datos.GetDateTime(datos.GetOrdinal("Fecha"));
oMatricula.Per_Cod = datos.GetInt32(datos.GetOrdinal("Per_Cod"));
oMatricula.TipMat_Cod = datos.GetInt32(datos.GetOrdinal("TipMat_Cod"));
oMatricula.Especialidad_Cod = datos.GetInt32(datos.GetOrdinal("Especialidad_Cod"));
oMatricula.Ciclo_Cod = datos.GetInt32(datos.GetOrdinal("Ciclo_Cod"));
oMatricula.Semestre_Cod = datos.GetInt32(datos.GetOrdinal("Semestre_Cod"));
oMatricula.Turno_Cod = datos.GetInt32(datos.GetOrdinal("Turno_Cod"));
//oMatricula.Mat_tip = datos.GetInt32(datos.GetOrdinal("Mat_tip"));
oMatricula.Mat_tip = !datos.IsDBNull(datos.GetOrdinal("Mat_tip")) ? datos.GetInt32(datos.GetOrdinal("Mat_tip")) : (Int32?)null;
oMatricula.Mat_Condicion = datos.GetInt32(datos.GetOrdinal("Mat_Condicion"));
oMatricula.Mar_Estado = datos.GetInt32(datos.GetOrdinal("Mar_Estado"));
matriculas.Add(oMatricula);
}
datos.Close();
}
catch (Exception e)
{
throw e;
}
finally
{
if (conexion.State == ConnectionState.Open)
conexion.Close();
conexion.Dispose();
}
return matriculas;
}
//public List<Matricula> listar()
//{
// SqlConnection conexion = new SqlConnection("Data Source=.;Initial Catalog=eDelivery; User=sa; Password=45880670");
// SqlCommand comando = conexion.CreateCommand();
// comando.CommandType = CommandType.StoredProcedure;
// comando.CommandText = "uspListarProductos";
// 0 //DataTable oDatatable = new DataTable();
// List<Matricula> matriculas = new List<Matricula>();
// try
// {
// conexion.Open();
// SqlDataReader datos = comando.ExecuteReader(CommandBehavior.CloseConnection);
// while (datos.Read())
// {
// Matricula oMatricula = new Matricula();
// oMatricula.mat_Cod = datos.GetInt32(datos.GetOrdinal("mat_Cod"));
// oMatricula.Fecha = datos.GetDateTime(datos.GetOrdinal("Fecha"));
// oMatricula.Per_Cod = datos.GetInt32(datos.GetOrdinal("Per_Cod"));
// oMatricula.TipMat_Cod = datos.GetInt32(datos.GetOrdinal("TipMat_Cod"));
// oMatricula.Especialidad_Cod = datos.GetInt32(datos.GetOrdinal("Especialidad_Cod"));
// oMatricula.Ciclo_Cod = datos.GetInt32(datos.GetOrdinal("Ciclo_Cod"));
// oMatricula.Semestre_Cod = datos.GetInt32(datos.GetOrdinal("Semestre_Cod"));
// oMatricula.Turno_Cod = datos.GetInt32(datos.GetOrdinal("Turno_Cod"));
// //oMatricula.Mat_tip = datos.GetInt32(datos.GetOrdinal("Mat_tip"));
// oMatricula.Mat_Condicion = datos.GetInt32(datos.GetOrdinal("Mat_Condicion"));
// oMatricula.Mar_Estado = datos.GetInt32(datos.GetOrdinal("Mar_Estado"));
// oDatatable.Add(oMatricula);
// }
// datos.Close();
// }
// catch (Exception e)
// {
// throw e;
// }
// finally
// {
// if (conexion.State == ConnectionState.Open)
// conexion.Close();
// conexion.Dispose();
// }
// return oDatatable;
//}
}
}
... ojo el procedimiento almacenado lista los datos de una tabla matricula que tiene valores null.
La capa logica de negocios es la siguiente
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using rSunat.ReportesSunat.AccesoDatos;
using rSunat.ReportesSunat.Entidades;
namespace rSunat.ReportesSunat.LogicadeNegocio
{
public class GestorMatricula
{
public static List<Matricula> ListarMatricula()
{
List<Matricula> oMatricula = new List<Matricula>();
try
{
MatriculaAD matriculaAD= new MatriculaAD();
oMatricula = matriculaAD.ListarMatricula();
}
catch (Exception e)
{
throw e;
}
return oMatricula;
}
}
}
y finalmente en la Capa de presentación, en el botón consultar
private void btnConsultarReporte_Click(object sender, EventArgs e)
{
//List<Matricula> tabla3 = GestorMatricula.ListarMatricula();
//this.dgReportesSunat.DataSource = tabla3;
//xActivo = true;
//Controles(xActivo);
}