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:
[/tagcod]

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!