none
recorrer un datagridview hasta encontrar un campo vacio y llenarlo con un textbox

    Pregunta

  • private void button1_Click(object sender, EventArgs e)
            {
                string conect = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Documents and Settings\Administrador\Mis documentos\Visual Studio 2010\Projects\punto de venta\punto de venta\tienda.accdb;Persist Security Info=True";
                OleDbConnection conexion = new OleDbConnection(conect);
                conexion.Open();
                string reporte = "select * from venta where fecha=@fecha";
                OleDbCommand cmd = new OleDbCommand(reporte, conexion);
                cmd.Parameters.AddWithValue("@fecha", textBox1.Text);
                cmd.CommandType = CommandType.Text;
                cmd.ExecuteNonQuery();
                OleDbDataAdapter da = new OleDbDataAdapter(cmd);

                DataSet dt = new DataSet();
                da.Fill(dt);
                dataGridView1.DataSource = dt.Tables[0];
                //dataGridView1.Update();
                //dataGridView1.Refresh();
                double suma = 0;

                foreach (DataGridViewRow row in dataGridView1.Rows)
                {

                    double importe = 0;

                    Double.TryParse(Convert.ToString(row.Cells["Importe"].Value), out importe);

                    suma += importe;

                }
                //double total = suma;
                textBox2.Text = Convert.ToString(suma);

                conexion.Close();

            }

            private void Form7_Load(object sender, EventArgs e)
            {

            }

            private void button2_Click(object sender, EventArgs e)
            {
                exporta_a_excel();
            }


            public void exporta_a_excel()
            {

                try
                {
                    if (dataGridView1.DataSource != null)
                    {
                        SaveFileDialog fichero = new SaveFileDialog();
                        fichero.Filter = "Excel (*.xls)|*.xls";
                        if (fichero.ShowDialog() == DialogResult.OK)
                        {
                            Microsoft.Office.Interop.Excel.Application aplicacion;
                            Microsoft.Office.Interop.Excel.Workbook libros_trabajo;
                            Microsoft.Office.Interop.Excel.Worksheet hoja_trabajo;
                            aplicacion = new Microsoft.Office.Interop.Excel.Application();
                            libros_trabajo = aplicacion.Workbooks.Add();
                            hoja_trabajo = (Microsoft.Office.Interop.Excel.Worksheet)libros_trabajo.Worksheets.get_Item(1);

                            //exportar cabeceras dgvLog
                            for (int i = 1; i <= this.dataGridView1.Columns.Count; i++)
                            {
                                hoja_trabajo.Cells[1, i] = this.dataGridView1.Columns[i - 1].HeaderText;
                            }

                            //Recorremos el DataGridView rellenando la hoja de trabajo con los datos
                            for (int i = 0; i < this.dataGridView1.Rows.Count - 1; i++)
                            {
                                for (int j = 0; j < this.dataGridView1.Columns.Count; j++)
                                {
                                    hoja_trabajo.Cells[i + 2, j + 1] = this.dataGridView1.Rows[i].Cells[j].Value.ToString();
                                  }
                                 }

                                libros_trabajo.SaveAs(fichero.FileName, Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal);
                                libros_trabajo.Close(true);
                                aplicacion.Quit();
                            }
                        }
                    }

                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }

            }

        }

    asi  me gustaria que quedara la sumatoria devuelta del textbox quede en un campo vacio de total y al ir agregando mas campos se recorra a uno mas abajo asi como la imagensubir imagenes
     Les pido su ayuda por que aqui he logrado resolver muchas dudas gracias por el apoyo                                                                                                                   






    sábado, 20 de junio de 2015 4:00

Respuestas

  • >>lo que necesito es que al convertirlo a excel el textbox2(5200) devuelto por la suma que tiene el resultado se inserte abajo del total de mi tabla

    pero porque no lo haces

    public void exporta_a_excel()
    {
    
    	try
    	{
    		if (dataGridView1.DataSource == null)
    		{
    			return;
    		}
    		
    		SaveFileDialog fichero = new SaveFileDialog();
    		fichero.Filter = "Excel (*.xls)|*.xls";
    		if (fichero.ShowDialog() != DialogResult.OK)
    		{
    			return;
    		}
    		
    		Microsoft.Office.Interop.Excel.Application aplicacion;
    		Microsoft.Office.Interop.Excel.Workbook libros_trabajo;
    		Microsoft.Office.Interop.Excel.Worksheet hoja_trabajo;
    		aplicacion = new Microsoft.Office.Interop.Excel.Application();
    		libros_trabajo = aplicacion.Workbooks.Add();
    		hoja_trabajo = (Microsoft.Office.Interop.Excel.Worksheet)libros_trabajo.Worksheets.get_Item(1);
    
    		//exportar cabeceras dgvLog
    		int i = 1;
    		int j = 1;
    		foreach (var col in dataGridView1.Columns)
    		{
    			hoja_trabajo.Cells[i, j] = col.HeaderText;
    			j++;
    		}
    
    		//Recorremos el DataGridView rellenando la hoja de trabajo con los datos
    		foreach (var row in dataGridView1.Rows)
    		{
    			j = 1;
    			i++;
    			foreach (var col in dataGridView1.Columns)
    			{
    				hoja_trabajo.Cells[i, j] = row.Cells[col.Index].Value.ToString();
    				j++;
    			}
    		}
    		
    		i++;
    		j = dataGridView1.Columns.Count - 1;
    		hoja_trabajo.Cells[i, j] = textbox2.Text;
    		
    		libros_trabajo.SaveAs(fichero.FileName, Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal);
    		libros_trabajo.Close(true);
    		aplicacion.Quit();
    			
    	}
    	catch (Exception ex)
    	{
    		MessageBox.Show(ex.Message);
    	}
    
    }

    como veras adapte el ejemplo para usar el foreach

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    sábado, 20 de junio de 2015 4:26

Todas las respuestas

  • hola

    para calcular la suma no necesitas recorrer el grid, podrias hacer que la query sume directo

    private void button1_Click(object sender, EventArgs e)
    {
    	string conect = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\...";
    	using(OleDbConnection conexion = new OleDbConnection(conect))
    	{
    		conexion.Open();
    		string reporte = "select SUM(Importe) from venta where fecha=@fecha";
    		OleDbCommand cmd = new OleDbCommand(reporte, conexion);
    		cmd.Parameters.AddWithValue("@fecha", textBox1.Text);
    
    		double suma = Convert.ToDouble(cmd.ExecuteScalar());
    
    		textBox2.Text = Convert.ToString(suma);
    	}
    
    }

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    sábado, 20 de junio de 2015 4:12
  • si funciona gracias ahora como imprimo el textbox2 abajo de el total en un campo vacio de total asi como en la imagen de arriba mira asi me imprime mi funcion de excel
    subir imagenes
    sábado, 20 de junio de 2015 4:16
  • >>lo que necesito es que al convertirlo a excel el textbox2(5200) devuelto por la suma que tiene el resultado se inserte abajo del total de mi tabla

    pero porque no lo haces

    public void exporta_a_excel()
    {
    
    	try
    	{
    		if (dataGridView1.DataSource == null)
    		{
    			return;
    		}
    		
    		SaveFileDialog fichero = new SaveFileDialog();
    		fichero.Filter = "Excel (*.xls)|*.xls";
    		if (fichero.ShowDialog() != DialogResult.OK)
    		{
    			return;
    		}
    		
    		Microsoft.Office.Interop.Excel.Application aplicacion;
    		Microsoft.Office.Interop.Excel.Workbook libros_trabajo;
    		Microsoft.Office.Interop.Excel.Worksheet hoja_trabajo;
    		aplicacion = new Microsoft.Office.Interop.Excel.Application();
    		libros_trabajo = aplicacion.Workbooks.Add();
    		hoja_trabajo = (Microsoft.Office.Interop.Excel.Worksheet)libros_trabajo.Worksheets.get_Item(1);
    
    		//exportar cabeceras dgvLog
    		int i = 1;
    		int j = 1;
    		foreach (var col in dataGridView1.Columns)
    		{
    			hoja_trabajo.Cells[i, j] = col.HeaderText;
    			j++;
    		}
    
    		//Recorremos el DataGridView rellenando la hoja de trabajo con los datos
    		foreach (var row in dataGridView1.Rows)
    		{
    			j = 1;
    			i++;
    			foreach (var col in dataGridView1.Columns)
    			{
    				hoja_trabajo.Cells[i, j] = row.Cells[col.Index].Value.ToString();
    				j++;
    			}
    		}
    		
    		i++;
    		j = dataGridView1.Columns.Count - 1;
    		hoja_trabajo.Cells[i, j] = textbox2.Text;
    		
    		libros_trabajo.SaveAs(fichero.FileName, Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal);
    		libros_trabajo.Close(true);
    		aplicacion.Quit();
    			
    	}
    	catch (Exception ex)
    	{
    		MessageBox.Show(ex.Message);
    	}
    
    }

    como veras adapte el ejemplo para usar el foreach

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    sábado, 20 de junio de 2015 4:26