Usuário com melhor resposta
selecionar e inserir mais de um item de um listbox

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.
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.
Todas as Respostas
-
-
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();
} -
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. -
-
-
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