CLR: .Net / Mono / Boo / Otros CLR > C#
Limpiar Datagridview
(1/1)
lugarda:
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# --- public 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 DataGridView) ((DataGridView)obj).DataSource = null; } } private void bLimpiar_Click(object sender, EventArgs e) { limpiaForm(this); }
Newtek:
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:
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# --- DataTable dt; dt = (DataTable)(((DataGridView)obj).DataSource); dt.Rows.Clear();
Saludos
lugarda:
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# --- if (obj is DataGridView) ((DataGridView)obj).Rows.Clear();
finalmente probando la solución de gerloxxx lo deje así:
--- Código: C# --- public 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 DataGridView) { DataTable dt; dt = (DataTable)(((DataGridView)obj).DataSource); dt.Rows.Clear(); } } gracias de nuevo a los dos por sus valioso aportes.
Navegación
Ir a la versión completa