CLR: .Net / Mono / Boo / Otros CLR > C#

 Obtener el tipo de un Datasource

(1/1)

lugarda:
Hola a Todos, tengo el siguiente caso:
Tengo en un WinForm un Datagridview. El método que me carga el datasource de este , es una Lista asi:

--- Código: C# --- public List<Purc_RequisitionTR> obtenerPurc_Requisition(Purc_RequisitionTR paramRequisicion,ControlConsulta controlconsulta)        {            return new Purc_RequisitionAD(conexionOracle).obtenerPurc_Requisition(paramRequisicion,controlconsulta);        }dvReq_Line.DataSource = new Purc_RequisitionNG(conexionOracle).obtenerPurc_ReqLine(DetalleReq, ControlConsulta.ConsultaLlave); Hasta alli todo funciona muy bien.Hice un método para Limpiar todos los objetos que estan contenido en  la WinForm, El problema que tengo es que mi método me limpia correctamente un DataGridView cuando el DataSource se ha cargado con un DataTable, pero si se ha cargado con una List<> (como describo en mi ejemplo), allí ya saca error y es obviamente porque lo estoy condicionando.Adjunto mi código del método limpiar , para que se den una idea de lo que intente hacer , pero lo deje en comentario porque no es lo óptimo.Si me dan una idea de como puedo  cambiar el typeof(System.Collections.Generic.List<Purc_Req_lineTR>)) , ya que haciendolo de esta manera , queda amarrado al una lista específica y la idea es poner este código en una libreria que pueda servir a cualquier desarrollador.Gracias por la ayudapublic static void limpiaForm(Control objContenedor)        {            // para cada control contenido en la colección            foreach (Control obj in objContenedor.Controls)            {                // si tiene hijos, recórrelos de forma recursiva                if (obj.HasChildren) limpiaForm(obj);                if (obj is TextBox) ((TextBox)obj).Text = "";                if (obj is CheckBox) ((CheckBox)obj).Checked = false;                if (obj is RadioButton) ((RadioButton)obj).Checked = false;                if (obj is ComboBox) ((ComboBox)obj).Text = null;                if (obj is ListBox) ((ListBox)obj).Items.Clear();                // cambie la forma de limpiar el dataGridView para que pintara correctamente las columnas predefinidas                // si se quiere volver a cargar los datos de la base de datos. Si es un DataGridView que no tiene                //predefinido el DataSource , el DataSource de mentenerse null                if (obj is DataGridView)                {                    if (((DataGridView)obj).DataSource != null)                    {                                     //string tipo = ((DataGridView)obj).DataSource.GetType().ToString();                        //if (((DataGridView)obj).DataSource.GetType() == typeof(System.Collections.Generic.List<Purc_Req_lineTR>))                        //{                        //    MessageBox.Show("lo encontro");                         //}                          DataTable dt;                        dt = (DataTable)(((DataGridView)obj).DataSource);                        dt.Rows.Clear();                    }                    else                    {                        ((DataGridView)obj).Rows.Clear(); ;                    }                }            }        }  

gabio2:
Ya probaste con esto:


--- Código: C# --- datagridview.DataSource = null;  

lugarda:
Hola, gracias por la respuesta.
Si ya lo habia probado , pero el problema es que si lo hago de esta forma me elimina las columnas que habia formateado.

Voy a seguir buscando . No puedo creer que esto no se pueda hacer, ya que limitaria a que los datagridview solo se puedan cargar con DataTable.

Gracias de nuevo.

Navegación

[0] Índice de Mensajes

Ir a la versión completa