Principales respuestas
Eliminar fila vacia de un datagridview

Pregunta
-
Hola amigos como puedo elimimar filas vacias de un datagridview, les platico mi problema,
estoy enlazando un archivo de excel a un datagrid pero ese archivo de excel tiene muchas filas vacias, entonces lo que quiero hacer es eliminar las filas que esten vacias para que me quede el datagridview con registros
les pongo un ejemplo de como se llena el datagridview
clave empleado consumo importes salario
01 juan 12 13 1300
fila vacia
02 pablo 14 14 1500
02 pedro 15 15 1600
fila vacia
a si es como mas o menos esta en mi datagridview pero hay muchas filas que estan vacias entonces las quiero eliminar para tener un datagridview de esta formna
clave empleado consumo importes salario
01 juan 12 13 1300
02 pablo 14 14 1500
02 pedro 15 15 1600
les adjunto mi codigo que estoy utilizando
Dim conexion As New OleDbConnection
Dim comando As New OleDbCommand
Dim adaptador As New OleDbDataAdapter
Dim dsexcel As New DataSet
Dim j As Integer
Try
Dim ExcelPath As String = txtexcelPath.Text.ToLower()
Dim hoja As String
hoja = Txthoja.Text.Trim
conexion.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ExcelPath & "; Extended Properties= Excel 8.0;"
conexion.Open()
comando.CommandText = "SELECT * FROM [" & hoja & "$]"
comando.Connection = conexion
adaptador.SelectCommand = comando
conexion.Close()
adaptador.Fill(dsexcel, "excel")
Catch ex As Exception
MessageBox.Show(ex.Message)
Exit Sub
End Try
Dim conexion2 As New SqlConnection
Dim cmdguardar As New SqlCommand
Dim cmdexis As New SqlCommandDataGridView1.DataSource = dsexcel.Tables(0)
me podrian ayudar, gracias
Respuestas
-
"juan11mh" escribió:
> estoy enlazando un archivo de excel a un datagrid pero ese archivo
> de excel tiene muchas filas vacias, entonces lo que quiero hacer
> es eliminar las filas que esten vacias para que me quede el
> datagridview con registros
>
> les adjunto mi codigo que estoy utilizando
>
> conexion.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;
> Data Source=" & ExcelPath & "; Extended Properties= Excel 8.0;"Hola:
Si tu intención es utilizar el ISAM de Excel para eliminar filas en un archivo de Excel, te advierto que estás perdiendo el tiempo, simplemente porque el ISAM de Excel NO PERMITE ELIMINAR FILAS DE UNA HOJA DE CÁLCULO. Es una limitación que tiene dicho ISAM.
Cuando desees actualizar el archivo de Excel, obtendrás la siguiente excepción:
Este ISAM no admite la eliminación de datos en una tabla vinculada.
Como alternativa, puedes crear una nueva hoja de cálculo en el libro que no contenga las filas vacías, y para ello, tampoco es necesario que carges los datos en un control DataGridView.
Si quieres saber cómo se hace, inserta en tu formulario la siguiente función:
''' <author> ''' Enrique Martínez Montejo - 2011 ''' </author> ''' <param name="excelPath"></param> Private Function CrearNuevaHoja(ByVal excelPath As String, _ ByVal nombreHoja As String, _ ByVal nombreNuevaHoja As String) As Integer Dim connString As String = _ "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Extended Properties='Excel 8.0;';" & _ "Data Source=" & excelPath Try ' Configuramos una conexión con el origen de datos. ' Using cnn As OleDbConnection = New OleDbConnection(connString) ' Creamos y configuramos el comando. ' Dim cmd As OleDbCommand = cnn.CreateCommand ' Especificamos la consulta SQL de creación de tabla que ' vamos a ejecutar. El nombre de la nueva hoja de cálculo, ' NO PUEDE ACABAR CON EL SIGNO $. ' cmd.CommandText = String.Format( _ "SELECT * INTO [{0}] FROM [{1}$] WHERE Campo1 IS NOT NULL", nombreNuevaHoja, nombreHoja) ' Abrimos la conexión cnn.Open() ' Ejecutamos el comando Dim n As Integer = cmd.ExecuteNonQuery() ' Devolvemos el número de registros afectados Return n End Using Catch ex As Exception ' Devolvemos la excepción al procedimiento llamador. ' Throw End Try End Function
Cuando desees crear la nueva hoja de cálculo, simplemente ejecutarías:
Try
Dim n As Integer = CrearNuevaHoja("C:\Mis documentos\Libro1.xls", "Hoja1", "NuevaHoja")MessageBox.Show(String.Format("Nº de registros afectados: {0}", n))
Catch ex As Exception
MessageBox.Show(ex.Message)End Try
Fíjate bien en la consulta SQL de creación de tabla:
SELECT * INTO [{0}] FROM [{1}$] WHERE Campo1 IS NOT NULL
¿Observas el valor «Campo1»? Ahí tendrás que especificar el nombre de una columna de la hoja de cálculo para seleccionar aquellas filas que tengan valores válidos (no NULL) en dicha columna. Es decir, la consula SQL seleccionará todas las filas donde el campo especificado tenga un valor.
- Propuesto como respuesta lopezatienza viernes, 1 de abril de 2011 14:58
- Marcado como respuesta Eduardo PorteschellerModerator lunes, 4 de abril de 2011 17:28
Todas las respuestas
-
-
Yo estaba pensando lo mismo que vos Arthuro pero me surgió la duda si al hacer esto no queda el Dataset distinto respecto del DataGridView.
Lo menciono porque si necesita operar sobre el DataSet o sobre el DataAdapter no le van a coincidir las filas, o por lo menos así lo veo yo con lo poco que se.
¿Seria así o estoy equivocado?
The Real Blue -
tienes razon electric_blue, pero este procedimiento lo puedes hacer cada ves que cargues el datagridview y si el caso es manipular la informacion se me hace mas sensillo manipularla desde el mismo grid que desde el dataset, la otra opcion es llenar un datatable con el dataadapter omitiendo las filas que esten vacias, la verdad tengo poca experiencia pero hasta ahora a mi me ha funcionado bien de esta forma
saludos
-
Buenas a todos.
Otra forma de ocultar las filas que no contengan datos es modificando la propiedad Visible a False, tomando como ejemplo el de Arthuro:
for each filaas datagridviewrow in datagridview1.rows
if filaas.cell(0).text=nothing then
filaas.Visible = False
end if
nextUn saludo.
http://www.lopezatienza.es -
Hola arturo Zerda estoy utilizando tu codigo pero me mandar herrores
For
Each filaas DataGridViewRow In DataGridView1.Rows
DataGridView1.Rows(fila).remove()
Lo que esta en negritas me manda el error, estoy utilizando Visual Basic: 2008
-
"juan11mh" escribió:
> estoy enlazando un archivo de excel a un datagrid pero ese archivo
> de excel tiene muchas filas vacias, entonces lo que quiero hacer
> es eliminar las filas que esten vacias para que me quede el
> datagridview con registros
>
> les adjunto mi codigo que estoy utilizando
>
> conexion.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;
> Data Source=" & ExcelPath & "; Extended Properties= Excel 8.0;"Hola:
Si tu intención es utilizar el ISAM de Excel para eliminar filas en un archivo de Excel, te advierto que estás perdiendo el tiempo, simplemente porque el ISAM de Excel NO PERMITE ELIMINAR FILAS DE UNA HOJA DE CÁLCULO. Es una limitación que tiene dicho ISAM.
Cuando desees actualizar el archivo de Excel, obtendrás la siguiente excepción:
Este ISAM no admite la eliminación de datos en una tabla vinculada.
Como alternativa, puedes crear una nueva hoja de cálculo en el libro que no contenga las filas vacías, y para ello, tampoco es necesario que carges los datos en un control DataGridView.
Si quieres saber cómo se hace, inserta en tu formulario la siguiente función:
''' <author> ''' Enrique Martínez Montejo - 2011 ''' </author> ''' <param name="excelPath"></param> Private Function CrearNuevaHoja(ByVal excelPath As String, _ ByVal nombreHoja As String, _ ByVal nombreNuevaHoja As String) As Integer Dim connString As String = _ "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Extended Properties='Excel 8.0;';" & _ "Data Source=" & excelPath Try ' Configuramos una conexión con el origen de datos. ' Using cnn As OleDbConnection = New OleDbConnection(connString) ' Creamos y configuramos el comando. ' Dim cmd As OleDbCommand = cnn.CreateCommand ' Especificamos la consulta SQL de creación de tabla que ' vamos a ejecutar. El nombre de la nueva hoja de cálculo, ' NO PUEDE ACABAR CON EL SIGNO $. ' cmd.CommandText = String.Format( _ "SELECT * INTO [{0}] FROM [{1}$] WHERE Campo1 IS NOT NULL", nombreNuevaHoja, nombreHoja) ' Abrimos la conexión cnn.Open() ' Ejecutamos el comando Dim n As Integer = cmd.ExecuteNonQuery() ' Devolvemos el número de registros afectados Return n End Using Catch ex As Exception ' Devolvemos la excepción al procedimiento llamador. ' Throw End Try End Function
Cuando desees crear la nueva hoja de cálculo, simplemente ejecutarías:
Try
Dim n As Integer = CrearNuevaHoja("C:\Mis documentos\Libro1.xls", "Hoja1", "NuevaHoja")MessageBox.Show(String.Format("Nº de registros afectados: {0}", n))
Catch ex As Exception
MessageBox.Show(ex.Message)End Try
Fíjate bien en la consulta SQL de creación de tabla:
SELECT * INTO [{0}] FROM [{1}$] WHERE Campo1 IS NOT NULL
¿Observas el valor «Campo1»? Ahí tendrás que especificar el nombre de una columna de la hoja de cálculo para seleccionar aquellas filas que tengan valores válidos (no NULL) en dicha columna. Es decir, la consula SQL seleccionará todas las filas donde el campo especificado tenga un valor.
- Propuesto como respuesta lopezatienza viernes, 1 de abril de 2011 14:58
- Marcado como respuesta Eduardo PorteschellerModerator lunes, 4 de abril de 2011 17:28
-
Hola:
¿Has probado de usar vistas? Yo las utilizo mucho y casi nunca veo que se utilicen, por aquí
Dim dv As DataView = New DataView(dsExcel.Tables(0), "Clave > 0")
DataGridView1.DataSource = dv
Se supone que la tabla tiene los nombres correctos de campos/columnas, y que Clave es numérico, si no lo es tendras que cambiar la condicion a Clave <> '' (con 2 comillas simples no una comilla doble).
Saludos