Trabalhando com Arraylist na memoria , sem Banco de Dados
01/10/2008
0
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:
[/code]
private void bntEditar_Click(object sender, EventArgs e)
{
frmItemVenda Aplic = new frmItemVenda(listBox1);
listBox1.Items[listBox1.SelectedIndex] = (Aplic.ShowDialog()).ToString();
}
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
Tiagux
Posts
02/10/2008
Codename.v
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.
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:
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:
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/
02/10/2008
Tiagux
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
03/10/2008
Codename.v
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:
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!
Clique aqui para fazer login e interagir na Comunidade :)