none
selecionar e inserir mais de um item de um listbox RRS feed

  • Pergunta

  • Boa Tarde,

    Estou com dificuldades para fazer um código:

    tenho uma tabela com 2 campos codNome e codExames.

    o meu listbox contem todos os exames que o usuario selecionou, quando eu apertar o Ok ele inseri no banco todos os exames, porém se o usuario selecionou mais de 1 exame quando ele inserir no banco ele vai inserir cada exame em uma campo, como o exemplo:

    codNome     codExame

    robert          2

    robert          4

    robert          5

     

    sendo que eu selecionei todos os exames de uma só vez e não selecionando e inserindo.

    terça-feira, 12 de julho de 2011 18:21

Respostas

  • Segue um exemplo de como pode ser feito, criei um Tabela no BD chamada de Exemplo (Id, Nome, Exame) e fiz o que deseja:

    Aspx:

    <body>
      <form id="form1" runat="server">
      <div>
        <asp:TextBox runat="server" ID="txtNome" /><br />
        <br />
        <asp:ListBox runat="server" ID="lbExames" SelectionMode="Multiple">
          <asp:ListItem Text="item1" />
          <asp:ListItem Text="item2" />
          <asp:ListItem Text="item3" />
          <asp:ListItem Text="item4" />
        </asp:ListBox><br /><br />
        <asp:Button Text="Gravar" ID="btnGravar" runat="server" 
          onclick="btnGravar_Click" />
      </div>
      </form>
    </body>
    

     

    CS:

     protected void Page_Load(object sender, EventArgs e)
        {
    
        }
    
        //método para inserir
        private void Inserir()
        {
          //instância da conexão
          SqlConnection conn = new SqlConnection(@"Data Source=ZÉGOIABA-PC\sqlexpress;Initial Catalog=DBTeste;Integrated Security=True;Pooling=False");
          //string contendo o comando para inserir
          string comando = "INSERT INTO Exemplo (Nome, Exame) values (@Nome, @Exame)";
          //instância do comando onde passo a stringcriada acima
          //e a conexão
          SqlCommand cmd = new SqlCommand(comando, conn);
          //abro a conexão
          conn.Open();
          //percorro os itens do listbox
          foreach (ListItem item in lbExames.Items)
          {
            //se o item estiver selecionado
            if (item.Selected)
            {
              //limpo os parâmetros
              cmd.Parameters.Clear();
              //Adiciono os valores nos parâmetros
              //onde o nome recebe o nome digitado
              //no textbox
              cmd.Parameters.AddWithValue("@Nome", txtNome.Text);
              //e o exame recebe o item selecionado
              //no listbox
              cmd.Parameters.AddWithValue("@Exame", item.Text);
              //executo a inserção
              cmd.ExecuteNonQuery();
            }
          }
          //fecho conexão
          conn.Close();
    
          //limpo os textbox      
          txtNome.Text = "";      
        }
    
        protected void btnGravar_Click(object sender, EventArgs e)
        {
          Inserir();
        }
    


    Abraços e espero ter ajudado!

     


    Estudar, Estudar e Estudar! Não existe caminho curto.
    • Marcado como Resposta Faussuaf quarta-feira, 13 de julho de 2011 17:42
    • Não Marcado como Resposta Faussuaf quarta-feira, 13 de julho de 2011 21:00
    • Marcado como Resposta Faussuaf quarta-feira, 13 de julho de 2011 21:00
    terça-feira, 12 de julho de 2011 20:32

Todas as Respostas

  • Faussuaf este não seria o comportamento esperado?

    Dê mais detalhes assim fica mais fácil de poder te ajudar e também o code.

     

    Abraços!


    Estudar, Estudar e Estudar! Não existe caminho curto.
    terça-feira, 12 de julho de 2011 18:54
  • Este é o que eu pretendo, mas não estou conseguindo fazer o código,,eu peguei um exemplo de um outro caso e tentei fazer, mas não consegui, fico mais ou menos assim.

    o FOR verificava se ainda tinha item no listbox, se tivesse inseria no banco e fazia o processo novamente, ateh não ter mais nenhum item no listbox, mas deu erro:

     

    No clique do botão:

     

     for (int i = 0; i < ListBoxProcedimentos2.Items.Count; i++)
            {
              
                 SqlConnection cn = new SqlConnection();
                 SqlCommand comando = new SqlCommand();

                cn.ConnectionString = ("string conexao")



                    string Insert = "INSERT INTO [dbo].[RECIBODEMED_PROCEDIMENTOS] ([cdReciboDemed], [idValorProcedimentos]) VALUES (@cdReciboDemed1, @idValorProcedimentos)"

                    comando.Connection = cn;
                    comando.CommandText = Insert;

     

                    comando.Parameters.AddWithValue("@cdReciboDemed1", Convert.ToInt32(LblRecibo.Text));
                    comando.Parameters.AddWithValue("@idValorProcedimentos", ListBoxProcedimentos2.Items[i]);


                    comando.ExecuteNonQuery();
                    cn.Close();

     

     
                if (ListBoxProcedimentos2.Items.Count - 1 != i)
                {
                   ListBoxProcedimentos2.Items[i].ToString();
                }
                else
                {
                    ListBoxProcedimentos2.Items[i].ToString();
                }

     

    terça-feira, 12 de julho de 2011 19:19
  • Segue um exemplo de como pode ser feito, criei um Tabela no BD chamada de Exemplo (Id, Nome, Exame) e fiz o que deseja:

    Aspx:

    <body>
      <form id="form1" runat="server">
      <div>
        <asp:TextBox runat="server" ID="txtNome" /><br />
        <br />
        <asp:ListBox runat="server" ID="lbExames" SelectionMode="Multiple">
          <asp:ListItem Text="item1" />
          <asp:ListItem Text="item2" />
          <asp:ListItem Text="item3" />
          <asp:ListItem Text="item4" />
        </asp:ListBox><br /><br />
        <asp:Button Text="Gravar" ID="btnGravar" runat="server" 
          onclick="btnGravar_Click" />
      </div>
      </form>
    </body>
    

     

    CS:

     protected void Page_Load(object sender, EventArgs e)
        {
    
        }
    
        //método para inserir
        private void Inserir()
        {
          //instância da conexão
          SqlConnection conn = new SqlConnection(@"Data Source=ZÉGOIABA-PC\sqlexpress;Initial Catalog=DBTeste;Integrated Security=True;Pooling=False");
          //string contendo o comando para inserir
          string comando = "INSERT INTO Exemplo (Nome, Exame) values (@Nome, @Exame)";
          //instância do comando onde passo a stringcriada acima
          //e a conexão
          SqlCommand cmd = new SqlCommand(comando, conn);
          //abro a conexão
          conn.Open();
          //percorro os itens do listbox
          foreach (ListItem item in lbExames.Items)
          {
            //se o item estiver selecionado
            if (item.Selected)
            {
              //limpo os parâmetros
              cmd.Parameters.Clear();
              //Adiciono os valores nos parâmetros
              //onde o nome recebe o nome digitado
              //no textbox
              cmd.Parameters.AddWithValue("@Nome", txtNome.Text);
              //e o exame recebe o item selecionado
              //no listbox
              cmd.Parameters.AddWithValue("@Exame", item.Text);
              //executo a inserção
              cmd.ExecuteNonQuery();
            }
          }
          //fecho conexão
          conn.Close();
    
          //limpo os textbox      
          txtNome.Text = "";      
        }
    
        protected void btnGravar_Click(object sender, EventArgs e)
        {
          Inserir();
        }
    


    Abraços e espero ter ajudado!

     


    Estudar, Estudar e Estudar! Não existe caminho curto.
    • Marcado como Resposta Faussuaf quarta-feira, 13 de julho de 2011 17:42
    • Não Marcado como Resposta Faussuaf quarta-feira, 13 de julho de 2011 21:00
    • Marcado como Resposta Faussuaf quarta-feira, 13 de julho de 2011 21:00
    terça-feira, 12 de julho de 2011 20:32
  • Vou testar e retorno se consegui
    quarta-feira, 13 de julho de 2011 12:05
  • Deu certo, só tive que arrumar o campo da tabela para varchar porque tava como int, mas o código deu certo
    quarta-feira, 13 de julho de 2011 17:43
  • DEU CERTO AGORA QUERIA COLOCAR EM UM LISTBOX TODOS ITEMS QUE EU SELECIONAR, TENTEI MAS NÃO CONSEGUI, COLOQUEI ESTA LINHA DE CÓDIGO:

    protected void ButtonInserir_Click1(object sender, EventArgs e)
        {
              
               Inserir();

             ListBoxProcedimentos2.Items.Add(ListBoxProcedimentos.SelectedValue);

    }

     

    E QUANDO EU SELECIONO OUTRO ITEM E INSIRO NÃO INSERE NO BANCO,,,ELE SOH INSERE O PRIMEIRO

    quarta-feira, 13 de julho de 2011 21:07