• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

n1ckooo

C# DataDridView Procurar item e substituir por outro

8 mensagens neste tópico

Boas,

eu tenho uma datagridview com 3 colunas (qtd , nome_produto, preço), e tenho botões de produtos com variáveis definidas com o nome do produto, a qtd e o preço do produto , a medida que clico nos botões produtos adiciono itens a datagridview.

eu quero que ao clicar nos botoes de produto, procura-se na datagridview se ja existia esse produto, e se já existir então mudava qtd para qtd + 1 e mantinha o nome do produto e multiplicava a quantidade pelo preço do produto.

Exemplo:

Botão sumol ;

variáveis : qtd(int) , btn.designação(string) e btn.preço_produto(double)

clicava uma vez e aparecia na datagridview : (1 , sumol lata , 1.00 ) qtd , nome , preço

Clicava pela segunda vez e deveria aparecer: (2, sumol lata, 2.00)

Vou deixar aqui o meu código, penso estar perto pois ele faz mais ao menos o que quero mas tem um erro se clicar bt1 bt1 faz exactamente o que quero , agora se clicar bt1 e depois outro botão por exemplo bt2 e depois bt1 já não faz o que quero...

Deixo o código para tentarem me ajudar obrigado


private void btn_produtos_click(object sender, EventArgs e)
        {
            botaoproduto btn = new botaoproduto();
            btn = (botaoproduto)sender;

            int qtdnew;
            int count;
            string compar;
            qtdnew = 0;



            count = dtgrid_Produtos.RowCount;
            if (count < 1)
            {
                qtd = 1;
                nome = btn.Designacao;
                preco = btn.PrecoProduto;
                dtgrid_Produtos.Rows.Insert(0, qtd, nome, preco);

            }
            else
            {
                for (int i = 0; i < count; i++)
                {
                    qtdnew = Convert.ToInt32(dtgrid_Produtos.Rows[i].Cells[0].Value);
                    index = dtgrid_Produtos.Rows[i].Index;
                
                    compar = dtgrid_Produtos.Rows[i].Cells[1].Value.ToString();
                    if (compar == btn.Designacao)
                    {
                        qtdnew += 1;
                        nome = compar;
                        preco = qtdnew * btn.PrecoProduto;
                        dtgrid_Produtos.Rows[index].SetValues(qtdnew, nome, preco);
                       
                        break;
                    }
                    else
                    {
                        qtd = 1;
                        nome = btn.Designacao;
                        preco = btn.PrecoProduto;
                        flag = false;
                        dtgrid_Produtos.Rows.Insert(0, qtd, nome, preco);
                        break;
                    }

                }


            }

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O For so executa uma unica vez. S eo primeiro produto for diferente do qque estas a adicionar o break no else faz com que saias do For.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

já ista resolvido..    :cheesygrin:

Vou deixar o código aqui pode ser necessário para alguém:

Botão que faz adicionar valor na datagrid

  
private void btn_produtos_click(object sender, EventArgs e)
	{
		botaoproduto btn = new botaoproduto();
		btn = (botaoproduto)sender;

		bool t = false;
		int count;
		int index = 0;
		string texto = null;




		count = dtgrid_Produtos.RowCount;



		if (count < 1)
		{

			t = false;
			goto end;

		}
		else
		{

			for (int i = 0; i < count; i++)
			{
				qtdnew = Convert.ToInt32(dtgrid_Produtos.Rows[i].Cells[0].Value);
				texto = dtgrid_Produtos.Rows[i].Cells[1].Value.ToString();

				if (texto == btn.Designacao)
				{
					t = true;
					index = dtgrid_Produtos.Rows[i].Index;
					goto end;
				}
			}
		}

	end:

		if (t)
		{
			qtdnew = qtdnew + 1;
			nome = texto;
			preco = qtdnew * btn.PrecoProduto;
			dtgrid_Produtos.Rows[index].SetValues(qtdnew, nome, preco);

		}
		else if (!t)
		{
			t = false;
			qtd = 1;
			nome = btn.Designacao;
			preco = btn.PrecoProduto;
			dtgrid_Produtos.Rows.Insert(count, qtd, nome, preco);

		}


	   // TOTAL += preco;
	   // lbl_total.Text = TOTAL.ToString() + " €";

	}
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

goto em c# ? Que boa maneira de comecar o dia.  :)

E que tal não usar o goto ?  :) Não é necessario. Ja se o count < 1 nunca vai entar no else por isso

executa a instrução que vem logo depois do if-then-else.

no for basta simplesmente fazer um break que deixa de executar o for e executa a instrução seguinte. Neste caso sai do else.

private void btn_produtos_click(object sender, EventArgs e)
{
	botaoproduto btn = new botaoproduto();
	btn = (botaoproduto)sender;

	bool t = false;
	int count;
	int index = 0;
	string texto = null;

	count = dtgrid_Produtos.RowCount;

	if (count < 1)
	{
		t = false;
	}
	else
	{
		for (int i = 0; i < count; i++)
		{
			qtdnew = Convert.ToInt32(dtgrid_Produtos.Rows[i].Cells[0].Value);
			texto = dtgrid_Produtos.Rows[i].Cells[1].Value.ToString();

			if (texto == btn.Designacao)
			{
				t = true;
				index = dtgrid_Produtos.Rows[i].Index;
				break;
			}
		}
	}

	if (t)
	{
		qtdnew = qtdnew + 1;
		nome = texto;
		preco = qtdnew * btn.PrecoProduto;
		dtgrid_Produtos.Rows[index].SetValues(qtdnew, nome, preco);

	}
	else if (!t)
	{
		t = false;
		qtd = 1;
		nome = btn.Designacao;
		preco = btn.PrecoProduto;
		dtgrid_Produtos.Rows.Insert(count, qtd, nome, preco);
		}


	// TOTAL += preco;
	// lbl_total.Text = TOTAL.ToString() + " €";

}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

obrigado skm já tinha mudado isso, olha ja agora que falas te no goto, disseram me que nao se devia utilizar o goto... Pelo que entendi partilhas a mesma opniao,desculpa se tiver errado.

Se isto for verdade porque que não se deve usar o goto?

obrigado :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O uso de GOTO leva a código nada legível e que era usado principalmente antes de aparecer programação estruturada. Agora (e já a algum tempo) são muito raros os casos em que é preferível o uso do GOTO.

Se quiseres ler um pouco mais -> Wikipedia

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigado pela explicação nada como aperfeiçoar o conhecimento na linguagem :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora