Jump to content

[Resolvido] Inserir valor variável double em um DataGridView


Zamparo

Recommended Posts

Olá gostaria de inserir alguns valores em um campo especifico do datagridview, mas não consigo jogar o valor da variável double para do datagridview.

Segue código:

private void bntNormalizar_Click(object sender, EventArgs e)
	{
		int Col = 1;
		for (Col = 1; Col < CargTab.ColumnCount; Col++ )
		{
			int Lin;
			double Valor = 0, Media = 0, Desv = 0;
			DataGridViewRow linha;
			DataGridViewCell celula;
			for (Lin = 0; Lin < CargTab.RowCount; Lin++ )
			{
				linha= CargTab.Rows[Lin];	   //i é o número  da linha seleccionada
				celula = linha.Cells[Col];				   //j é a posição da coluna seleccionada (0 para a primeira e por ai fora)
				Valor += Convert.ToDouble(celula.Value);
			}
			Media = Valor / (Lin - 1);
			Desv = (Valor - Media) * (Valor - Media);
			//ERRO NAS LINHAS ABAIXO
			CargTab.Rows[Lin + 2].Cells[Col].Value = Media;
			CargTab.Rows[Lin + 2].Cells[Col].Value = Desv;
			CargTab.Refresh();
		}

Obrigado

Link to comment
Share on other sites

Boas,

o erro que dá é que estás a tentar aceder a linhas que não existem?

Não terás que adicionar primeiro essas linhas?

Tentei criar um for para adicionar mais 3 linas porem da o erro:

Rows cannot be programmatically added to the DataGridView's rows collection when the control is data-bound.

Segue código com o novo for:

private void bntNormalizar_Click(object sender, EventArgs e)
	{
		int Col = 1;
		for (Col = 1; Col < CargTab.ColumnCount; Col++ )
		{
			int Lin;
			double Valor = 0, Media = 0, Desv = 0;
			DataGridViewRow linha;
			DataGridViewCell celula;
			for (int x = 0; x < 3; x++){// add linhas erro!!!!!
				CargTab.Rows.Add();
			}
			CargTab.Refresh();
			for (Lin = 0; Lin < CargTab.RowCount; Lin++ )
			{
				linha= CargTab.Rows[Lin];	   //i é o número  da linha selecionada
				celula = linha.Cells[Col];				   //j é a posição da coluna selecionada (0 para a primeira e por ai fora)
				Valor += Convert.ToDouble(celula.Value);
			}
			Media = Valor / (Lin - 1);
			Desv = (Valor - Media) * (Valor - Media);
			 //ERRO NAS LINHAS ABAIXO
			CargTab.Rows[Lin + 2].Cells[Col].Value = Media;
			CargTab.Rows[Lin + 2].Cells[Col].Value = Desv;
			CargTab.Refresh();
		}
Edited by Zamparo
Link to comment
Share on other sites

O Add precisa de um parametro com a linha a adicionar.

Vê aqui exemplos:

http://stackoverflow.com/questions/10063770/c-sharp-how-to-add-a-new-row-to-datagridview-programmatically

No entanto isso não iria adicionar 3 linhas para cada coluna?

Olá nelsonr não tem problema de não add 3 linhas só queria pular uma linha para adicionar os valores.

Fiz da forma abaixo, não sei se está certo sou iniciante em programação desculpe as falhas. segue código novamente com o erro Rows cannot be programmatically added to the DataGridView's rows collection when the control is data-bound. persistindo.

    private void bntNormalizar_Click(object sender, EventArgs e)
    {
	    int Col = 1;
	    for (Col = 1; Col < CargTab.ColumnCount; Col++ )
	    {
		    int Lin, cel = 0;
		    double Valor = 0, Media = 0, Desv = 0;
		    DataGridViewRow linha;
		    DataGridViewCell celula;
		    /*for (int x = 0; x < 3; x++){
			    CargTab.Rows.Add();
		    }*/
		    CargTab.Refresh();
		    for (Lin = 0; Lin < CargTab.RowCount; Lin++ )
		    {
			    linha= CargTab.Rows[Lin];	   //i é o número  da linha seleccionada
			    celula = linha.Cells[Col];				   //j é a posição da coluna seleccionada (0 para a primeira e por ai fora)
			    Valor += Convert.ToDouble(celula.Value);
		    }
		    Media = Valor / (Lin - 1);
		    Desv = (Valor - Media) * (Valor - Media);
		    //ERRO NAS LINHAS ABAIXO
		    /*CargTab.Rows[Lin + 2].Cells[Col].Value = Media;
		    CargTab.Rows[Lin + 2].Cells[Col].Value = Desv;*/
		    DataGridViewRow row = (DataGridViewRow)CargTab.Rows[0].Clone();
		    row.Cells[cel].Value = Media;
		    cel ++;
		    row.Cells[cel].Value = Desv;
		    cel ++;
		    CargTab.Rows.Add(row);
		    CargTab.Refresh();
	    }
    }
Link to comment
Share on other sites

Ah espera, a grelha tem os dados ligados directamente a uma origem (databound)?

Assim para adicionares linhas à grelha, teras de adicionar na origem.

Esses dados vêm de onde? base de dados?

nelsonr esses vem de uma planilha em Excel segue o código completo para você dar uma olhada:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
namespace Normalização
{
   public partial class FormNorm : Form
   {
    public FormNorm()
    {
	    InitializeComponent();
    }
    private void button3_Click(object sender, EventArgs e)
    {
	    OpenFileDialog ofd = new OpenFileDialog();
	    ofd.Title = "Selecionar Arquivo";
	    ofd.FileName = TxBoxArquivo.Text;
	    ofd.Filter = "Arquivo Excel (.xls.xlxs)|*.xls;*.xlsx|Todos os Arquivos|*.*";
	    ofd.FilterIndex = 1;
	    if(TxBoxAba.Text == ""){
		    MessageBox.Show("Insira a aba da planilha que desseja ler!!!!!");
	    }
	    else if (ofd.ShowDialog() == DialogResult.OK)
	    {
		    TxBoxArquivo.Text = ofd.FileName;
		    Application.DoEvents();   
		    /*string constr = "Provider = MicroSoft.Jet.OLEDB.4.0; Data Source="+ TxBoxArquivo.Text +"; Extended Properties =\"Excel 8.0; HDR=yes;\";";
		    OleDbConnection conn = new OleDbConnection(constr);
		    OleDbDataAdapter sda = new OleDbDataAdapter("SELECT * FROM [sheet0$]", conn);
		    DataTable dt = new DataTable();
		    sda.Fill(dt);
		    CargTab.DataSource = dt;*/
		    //Define Caminho completo para ficheiro em STRING.
			 string path = System.IO.Path.GetFullPath(ofd.FileName);
			 // Define pedido a fazer em forma de STRING.
			 string query = @"SELECT * FROM ["+TxBoxAba.Text+"$]";
		    // Define ligação como nova ligação OleDB.
		    OleDbConnection conn = new OleDbConnection();
		    // Define linha de comunicação com todos os dados recuperados até aqui.
		    conn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + ofd.FileName + ";Extended Properties= \"Excel 12.0 Xml;HDR=YES;IMEX=1\";";
		    // Define adaptador para pedido "query" (tipo string) ao adaptador que comunica com o ficheiro excel através da ligação CONN definida anteriormente.
		    OleDbDataAdapter adapter = new OleDbDataAdapter(query, conn);
		    DataSet dataSet = new DataSet();
		    adapter.Fill(dataSet);
		    CargTab.DataSource = dataSet.Tables[0];
	    }
	    else{
		    MessageBox.Show("Erro ao encontrar arquivo!!!!!");
	    }
    }
    private void bntNormalizar_Click(object sender, EventArgs e)
    {
	    int Col = 1;
	    for (Col = 1; Col < CargTab.ColumnCount; Col++ )
	    {
		    int Lin, cel = 0;
		    double Valor = 0, Media = 0, Desv = 0;
		    DataGridViewRow linha;
		    DataGridViewCell celula;
		    CargTab.Refresh();
		    for (Lin = 0; Lin < CargTab.RowCount; Lin++ )
		    {
			    linha= CargTab.Rows[Lin];	   //i é o número  da linha seleccionada
			    celula = linha.Cells[Col];				   //j é a posição da coluna seleccionada (0 para a primeira e por ai fora)
			    Valor += Convert.ToDouble(celula.Value);
		    }
		    Media = Valor / (Lin - 1);
		    Desv = (Valor - Media) * (Valor - Media);
		    //ERRO NAS LINHAS ABAIXO
		    /*CargTab.Rows[Lin + 2].Cells[Col].Value = Media;
		    CargTab.Rows[Lin + 2].Cells[Col].Value = Desv;*/
		    DataGridViewRow row = (DataGridViewRow)CargTab.Rows[Lin + 1].Clone();
		    row.Cells[cel].Value = Media;
		    cel ++;
		    row.Cells[cel].Value = Desv;
		    cel ++;
		    CargTab.Rows.Add(row);
		    CargTab.Refresh();
	    }
    }
   }
}
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.