none
Descargar cabecera y evitar dar clic en la misma en un DataGridView C# RRS feed

  • Pregunta

  • Buenas tardes, 

    Tengo un inconveniente al descargar un archivo excel, no descarga la cabecera del DataGrigView solo los datos asignados en cada columna y fila

    Quisiera que también descargara la cabecera del datagridview.

    Ademas, evitar borrar y/o desordenar los datos cuando se da clic en la cabecera

    La anterior imagen muestra como cambia todo al oprimir en la cabecera.

    Agradecería su colaboración

    jueves, 3 de agosto de 2017 20:53

Respuestas

  • Itera por las columnas de la misma manera como lo has hecho con las filas, es muy simple:

    try
    {
    	//...
    	hoja_trabajo = (Worksheet)libros_trabajo.Worksheets.get_Item(1);
    
    	//Agregar encabezado
    	foreach (DataGridViewColumn col in dataGridView1.Columns)
    		hoja_trabajo.Cells[1, col.Index + 1] = col.HeaderText;
    
    	//Agregar filas de datos
    	foreach (DataGridViewRow row in dataGridView1.Rows)
    		foreach (DataGridViewCell cell in row.Cells)
    			hoja_trabajo.Cells[2 + row.Index, cell.ColumnIndex + 1] = 
    								Convert.ToString(cell.Value);
    
    	libros_trabajo.SaveAs(fichero.FileName, XlFileFormat.xlWorkbookNormal);
    	libros_trabajo.Close(true);
    }
    catch (Exception ex)
    {
    	MessageBox.Show(ex.Message);
    }



    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.
    jueves, 3 de agosto de 2017 23:15
  • Hola

    Revisa este link Trabajar con archivos Excel desde WindowsForms (SpreadSheetLight) se trata de una manera fácil de trabajar con archivos Excel.

    Saludos


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú

    viernes, 4 de agosto de 2017 2:38
  • Hola Jairo, para el caso de la cabezera, evitar el ordenamiento ascendente y descendente colocas luego de cargar el Grid

    foreach (DataGridViewColumn Col in Dgv.Column)
                {
                    Col.SortMode = DataGridViewColumnSortMode.NotSortable;
    Para entender el problema de la carga del el Excel, deberías cargaqr el código para analizarlo

    jueves, 3 de agosto de 2017 22:03
  • Claro, pero asegúrate de que sea luego de cargar los datos y de cerrar al archivo, para evitar el error de archivo ya se encuentra abierto. Cuando utilices OpenfileDialog carga en una variable string el path del archivo

    ej: string Path = fichero.FileName

    y luego lo invocas con ProssesStar

    System.Diagnostics.Process.Start(Path)

    Saludos

    viernes, 4 de agosto de 2017 15:39

Todas las respuestas

  • Hola Jairo, para el caso de la cabezera, evitar el ordenamiento ascendente y descendente colocas luego de cargar el Grid

    foreach (DataGridViewColumn Col in Dgv.Column)
                {
                    Col.SortMode = DataGridViewColumnSortMode.NotSortable;
    Para entender el problema de la carga del el Excel, deberías cargaqr el código para analizarlo

    jueves, 3 de agosto de 2017 22:03
  • Gracias!!! lo del ordenamiento me funciono PERFECTAMENTE...........

    Aqui está el código para la descarga:

    private void ExportarDataGridViewExcel(DataGridView dataGridView1)
            {
                SaveFileDialog fichero = new SaveFileDialog();
                fichero.Filter = "Excel (*.xls) | *.xls;";
                if (fichero.ShowDialog() == DialogResult.OK)
                {
                    Microsoft.Office.Interop.Excel.Application aplicacion;
                    Workbook libros_trabajo;
                    Worksheet hoja_trabajo;
                    aplicacion = new Microsoft.Office.Interop.Excel.Application();
                    libros_trabajo = aplicacion.Workbooks.Add();

                    hoja_trabajo = (Worksheet)libros_trabajo.Worksheets.get_Item(1);

                    for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
                    {
                        for (int j = 0; j < dataGridView1.Columns.Count; j++)
                        {
                            try
                            {
                                hoja_trabajo.Cells[i + 1, j + 1] = dataGridView1.Rows[i].Cells[j].Value.ToString();
                            }
                            catch (Exception)
                            {
                                hoja_trabajo.Cells[i + 1, j + 1] = " ";
                            }
                            if (hoja_trabajo.Cells[i + 1, j + 1] == null)
                            {
                                hoja_trabajo.Cells[i + 1, j + 1] = " ";
                            }
                        }
                    }
                    libros_trabajo.SaveAs(fichero.FileName, XlFileFormat.xlWorkbookNormal);
                    libros_trabajo.Close(true);
                }
            }

            private void btnDescargar_Click_1(object sender, EventArgs e)
            {
                    ExportarDataGridViewExcel(dataGridView1);
            }

    Nose como descargar el encabezado... 

    jueves, 3 de agosto de 2017 22:17
  • Itera por las columnas de la misma manera como lo has hecho con las filas, es muy simple:

    try
    {
    	//...
    	hoja_trabajo = (Worksheet)libros_trabajo.Worksheets.get_Item(1);
    
    	//Agregar encabezado
    	foreach (DataGridViewColumn col in dataGridView1.Columns)
    		hoja_trabajo.Cells[1, col.Index + 1] = col.HeaderText;
    
    	//Agregar filas de datos
    	foreach (DataGridViewRow row in dataGridView1.Rows)
    		foreach (DataGridViewCell cell in row.Cells)
    			hoja_trabajo.Cells[2 + row.Index, cell.ColumnIndex + 1] = 
    								Convert.ToString(cell.Value);
    
    	libros_trabajo.SaveAs(fichero.FileName, XlFileFormat.xlWorkbookNormal);
    	libros_trabajo.Close(true);
    }
    catch (Exception ex)
    {
    	MessageBox.Show(ex.Message);
    }



    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.
    jueves, 3 de agosto de 2017 23:15
  • Hola

    Revisa este link Trabajar con archivos Excel desde WindowsForms (SpreadSheetLight) se trata de una manera fácil de trabajar con archivos Excel.

    Saludos


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú

    viernes, 4 de agosto de 2017 2:38
  • Excelente muchas gracias!!!!! aunque descarga normal me sale el siguiente error y no e podido solucionarlo


    También me gustaría saber si existe la forma de que al momento de descargar el archivo se abra automáticamente...

    viernes, 4 de agosto de 2017 14:03
  • Ya logré solucionar ese error, por ahora nomas me  gustaría saber si existe la forma de que al momento de descargar el archivo se abra automáticamente.
    viernes, 4 de agosto de 2017 14:43
  • Claro, pero asegúrate de que sea luego de cargar los datos y de cerrar al archivo, para evitar el error de archivo ya se encuentra abierto. Cuando utilices OpenfileDialog carga en una variable string el path del archivo

    ej: string Path = fichero.FileName

    y luego lo invocas con ProssesStar

    System.Diagnostics.Process.Start(Path)

    Saludos

    viernes, 4 de agosto de 2017 15:39
  • Excelente muchas gracias!!!!
    viernes, 4 de agosto de 2017 15:49