Array
(
)

Trabalhando com Arraylist na memoria , sem Banco de Dados

Tiagux
   - 01 out 2008

Eae pessoal , olha eu aque denovo , boa tarde...

Intão pessoal , estou com um probleminha aqui , eu tenho uma listbox com varios itens , eu clico em um item e clico no botao editar , o código que esta no botao editar é esse:


private void bntEditar_Click(object sender, EventArgs e)

{

frmItemVenda Aplic = new frmItemVenda(listBox1);

listBox1.Items[listBox1.SelectedIndex] = (Aplic.ShowDialog()).ToString();

}
#Código





eu estou chamando outro form ai , ou seja estou chamando o mesmo form que inclui itens , ele edita certinho e tudo ,porem.. , eu edito um item com valor de 100 reais e passo ele pra 50 reais , no meu valor total ele nao esta subtraindo , ele ta somando , ai fica 150 , alguem sabe oq tenho que fazer ?? , e tambem tem uma outra coisinha , e se na hora que eu aperta o botao editar , ele me abre o msm form de adicionar como eu disse acima , so que em vez de abrir vazio , ele abre com os dados do item que eu selecionei , tem como fazer ? plz da uma ajudinha ai , Abraço a todos ae vlw ..

PS:Estou trabalhando com esse o listbox apenas na memoria



Codename.v
   - 02 out 2008

Olá! Pelo que entendi você possui uma variável ´total´ que guarda a soma do valor de todos os itens do controle ListBox, certo?
Então quando você modifica o valor de um dos itens o valor total não subtrai, certo?

O correto seria você postar o código que mostra a maneira como você está preenchendo a sua variável ´total´ para que o pessoal pudesse analisar o problema. Fica a dica! :D

Vamos ver se consigo te ajudar com isso mesmo assim.

Para a primeira dúvida o que você deve fazer é criar um método que zere a sua variável ´total´ e realize novamente a somatória de todos os itens do controle ListBox sempre que necessário.

#Código


private void SomaValores()
{
/*
Aqui a sua variável "total" é zerada para que não haja erro
ao somar todos os valores novamente.
*/
valorTotal = 0;

/*
Agora basta usar um comando foreach com uma string para
percorrer os itens do controle ListBox e soma-los à variável
"total".
*/
foreach (string item in listBoxItens.Items)
{
valorTotal += Convert.ToDouble(item);
}
}


Então no seu código ficaria assim:

#Código

private void bntEditar_Click(object sender, EventArgs e)
{
frmItemVenda Aplic = new frmItemVenda(listBox1);
listBox1.Items[listBox1.SelectedIndex] = (Aplic.ShowDialog()).ToString();

this.SomaValores();
}


Acho que isso deve te ajudar.

Sua segunda dúvida é sobre transporte de dados entre formulários, certo?
Você pode criar umas variáveis publicas no seu ´frmItemVenda´ e acessá-las antes da chamada do método ShowDialog().
Vamos supor que você possua as váriaveis publicas ´codigo´ e ´nome´ no seu ´frmItemVenda´.

Então você faria o seguinte:

#Código

private void bntEditar_Click(object sender, EventArgs e)
{

frmItemVenda Aplic = new frmItemVenda(listBox1);
Aplic.codigo = "valor a ser acessado no outro form";
Aplic.nome = "valor a ser acessado no outro form";
listBox1.Items[listBox1.SelectedIndex] = (Aplic.ShowDialog()).ToString();

}


Então você pode criar um método que utilize essas variáveis para preencher os TextBox ou o que seja e chamá-lo no método load do seu ´frmItemVenda´.

Abraços! \o/


Tiagux
   - 02 out 2008

Ola , bom vlw pela dica , mais eu acabei desistindo de fazer com listBox , hehe , eu fiz com listview , pq tipo achei mais simples , olha um exemplo de como eu viz com listView ...

#Código

private void bntEditar_Click(object sender, EventArgs e)
{ string message = "Voce deseja editar esse item?";
string capition = "Edição de Item";
MessageBoxButtons buttons = MessageBoxButtons.YesNo;
DialogResult result;
result = MessageBox.Show(this, message, capition, buttons,
MessageBoxIcon.Question, MessageBoxDefaultButton.Button1,
MessageBoxOptions.RightAlign);
//Se o usuario clicar em Sim , entao entra no if.
if (result == DialogResult.Yes)
{
if (listView1.SelectedItems[0].Selected)
{
frmItemVenda f = new frmItemVenda(listView1, lblValor_Iten2, lblValorToT_2, lblValorToT_Azul2, lblValorToT_Verm2);
f.txtProduto_ItemVenda.Text = listView1.FocusedItem.SubItems[0].Text = Aplic.ShowDialog().ToString();
ListView.SelectedIndexCollection indexes =
this.listView1.SelectedIndices;
double price = 0; double segundovalor = 0;
foreach (int index in indexes)
{
price += double.Parse(this.listView1.Items[index].SubItems[1].Text) * double.Parse(this.listView1.Items[index].SubItems[2].Text);
segundovalor += int.Parse(lblValorToT_Verm2.Text) - price;
}
lblValorToT_Verm2.Text = segundovalor.ToString();
lblValorToT_2.Text = segundovalor.ToString();
lblValorToT_Azul2.Text = segundovalor.ToString();
lblValor_Iten2.Text = segundovalor.ToString();
}


Esse códico eu adicionei no botao editar , bom resolveu meu problema ,tomara que seje util para mais pessoas , bom até a proxima vlw.
Abraços,
Tiago Gomes


Codename.v
   - 03 out 2008

Uma boa coisa a se fazer também é você criar classes para transporte de dados contendo atributos e propriedades. Por exemplo:

#Código


public class Produtos
{
private int _prodCodigo;
private string _prodNome;
private double _prodValor;

public ProdCodigo
{
get { return _prodCodigo; }
set { _prodCodigo = value; }
}

public ProdNome
{
get { return _prodNome; }
set { _prodNome = value; }
}

public ProdValor
{
get { return _prodValor; }
set { _prodValor = value; }
}
}


E utilizalas em conjunto com o Generec List<>. Por exemplo:

#Código

List<Produtos> listaProdutos = new List<Produtos>();

Produtos pdts = new Produtos();
pdts.ProdCodigo = Convert.ToInt32(txtCodigo.Text);
pdts.ProdNome = txtNome.Text;
pdts.ProdValor = Convert.ToDouble(txtValor.Text);

listaProdutos.Add(pdts);


O List<> quebra um galhão!!

Abraços!