• Lunes 18 de Noviembre de 2024, 08:41

Autor Tema:  Limpiar Datagridview  (Leído 19299 veces)

lugarda

  • Miembro activo
  • **
  • Mensajes: 52
  • Nacionalidad: co
    • Ver Perfil
Limpiar Datagridview
« en: Jueves 8 de Julio de 2010, 15:57 »
0
Hola amigos , tengo un DataGridview al cual le he predefinido tres columas factura,Valor y una tercera columna del tipo DataGridViewCheckBoxColumn. Cuando hago el Load de la Form que contiene el  DataGridViex se cargan los datos del DataSource de la base de datos . En esta misma Form tengo  un boton Limpiar para que limpie todos los controles (Textbox, ComboBox,dataGridView) .

Tengo el siguiente método para recorrer todos los controles y limpiarlos , dependiendo del tipo que sean. El problema que tengo es que para el DataGridview no me pinta de nuevo las columnas que predefiní . como hago para que despues que limpie los datos del DataGridView me pinte de nuevo las columnas que habia predefinido inicialmente.

Si alguno tiene un tip que me pueda ayudar , se los  agradezco muchisimo.

Ahh y gracias chicos por todas las ayudas que me han brindado.

Código: C#
  1.  
  2.  
  3. public static void limpiaForm(Control objContenedor)
  4.         {
  5.           // para cada control contenido en la colección
  6.            foreach (Control obj in objContenedor.Controls)
  7.            {
  8.              // si tiene hijos, recórrelos de forma recursiva
  9.                if (obj.HasChildren) limpiaForm(obj);
  10.                if (obj is TextBox)     ((TextBox)obj).Text = "";
  11.                if (obj is CheckBox)    ((CheckBox)obj).Checked = false;
  12.                if (obj is RadioButton) ((RadioButton)obj).Checked = false;
  13.                if (obj is DataGridView) ((DataGridView)obj).DataSource = null;
  14.           }
  15.        }
  16.  
  17.  private void bLimpiar_Click(object sender, EventArgs e)
  18.         {
  19.             limpiaForm(this);
  20.            }
  21.  
  22.  
  23.  

Newtek

  • Miembro activo
  • **
  • Mensajes: 81
  • Nacionalidad: cr
    • Ver Perfil
    • http://www.newtekwebhosting.com.com?id=000231
Re: Limpiar Datagridview
« Respuesta #1 en: Jueves 8 de Julio de 2010, 16:45 »
0
Ok tengo un par de preguntas para ti... solo para clarificar...


En donde pre-definistes esas columnas.. en el  load del form ?

Bueno en fin yo creo que podrias usar algo como esto para limpiar los valores de los rows.

datagrid.Rows.RemoveAt(0) //Yo puse 0 pero lo que tiene que ir alli es el index del row.

Otra cosa que talvez puedes probar es datagrid.rows.clear() ... avisame que te funciona mejor. No estoy 100% seguro pero creo que tambien hay un metodo que se llama datagrid.clear()

Bueno avisame con mucho gusto te ayudo.

Saludos.


Carlos Cor.
Web Hosting, Design, Development & SEO at Crystaltech

gerloxxx

  • Miembro MUY activo
  • ***
  • Mensajes: 121
    • Ver Perfil
Re: Limpiar Datagridview
« Respuesta #2 en: Jueves 8 de Julio de 2010, 18:05 »
0
Hola, si predefiniste las columnas en tiempo de diseño, cuando asignas null al datasource, dichas columnas se conservan, a menos que tu mismo las elimines ( .Columns.Clear(); )
se me hace raro que no te funcione....

Lo que puedes probar es eliminar solo los renglones del datasource, asi como comenta  Carlos_Cor_CT, pero trabajando directamente sobre este:

Código: C#
  1.  
  2.             DataTable dt;
  3.             dt = (DataTable)(((DataGridView)obj).DataSource);
  4.             dt.Rows.Clear();
  5.  
  6.  

Saludos

lugarda

  • Miembro activo
  • **
  • Mensajes: 52
  • Nacionalidad: co
    • Ver Perfil
Re: Limpiar Datagridview
« Respuesta #3 en: Jueves 8 de Julio de 2010, 20:42 »
0
gerloxxx gracias . Probé tu solucion eliminando las filas directamente sobre el datatable y funcionó perfecto.
Carlos_Cor_CT gracias tambien por tus ideas. Probé con tu solución pero me saca el siguiente mensaje de error "No se puede borrar esta Lista" System.Data :
La linea de código que habia puesto era
Código: C#
  1.  if (obj is DataGridView) ((DataGridView)obj).Rows.Clear();
  2.  

finalmente probando la solución de gerloxxx lo deje así:
Código: C#
  1.  public static void limpiaForm(Control objContenedor)
  2.         {
  3.           // para cada control contenido en la colección
  4.            foreach (Control obj in objContenedor.Controls)
  5.            {
  6.  
  7.                // si tiene hijos, recórrelos de forma recursiva
  8.                if (obj.HasChildren) limpiaForm(obj);
  9.                if (obj is TextBox)     ((TextBox)obj).Text = "";
  10.                if (obj is CheckBox)    ((CheckBox)obj).Checked = false;
  11.                if (obj is RadioButton) ((RadioButton)obj).Checked = false;
  12.                if (obj is DataGridView)
  13.                {
  14.                    DataTable dt;
  15.                    dt = (DataTable)(((DataGridView)obj).DataSource);
  16.                    dt.Rows.Clear();
  17.                }
  18.           }
  19.  
gracias de nuevo a los dos por sus valioso aportes.