none
Atualizar tabela com informação de dropdownlist RRS feed

  • Pergunta

  • Bom dia pessoal,

    Tenho um gridview numa página e um dropdown.

    Esse grid é uma query simples de uma tabela onde existem (principalmente) 3 campos: Comentario Inicio, Comentario Atualizacao e Comentario Encerramento. Habilitei a coluna "Select" do gridview.

    Neste dropdownlist tem como datasource uma segunda tabela, onde tenho comentarios pre estabelecidos.

    A ideia é simplesmente: Selecionar o comentario no dropdown, e quando clicar no botão, inserir no campo comentario_atualizacao.

    Ate agora tenho:

    protected void Btn_Atualiza_TempoReal_Click(object sender, EventArgs e)
        {
            SqlConnection conn = new SqlConnection("Data Source=DKSERVER;Initial Catalog=DICOM;Persist Security Info=True;User ID=***;Password=*****");
            string sql = "INSERT INTO TEMPO_REAL(OBSERVACAO_ATUALIZACAO) VALUES(@observacao_atualizacao) WHERE ID=(PRECISO CONSEGUIR PEGAR O ID DO REGISTRO SELECIONADO NO GRID!!!);
            

            try
            {
                SqlCommand comando = new SqlCommand(sql, conn);
                comando.CommandType = CommandType.Text;
                comando.Parameters.AddWithValue("@observacao_atualizacao", Dropdown_TempoReal_NConform.SelectedItem);
                
                conn.Open();
                comando.ExecuteNonQuery();
                conn.Close();
                conn.Dispose();


    Leopoldo A. Nascimento (Ajude o máximo que puder, que assim será feito por você.) - Foi útil esta resposta? Então marque. ;)


    sexta-feira, 2 de maio de 2014 14:41

Respostas

  • Olá seu erro está nessa linha :

    comando.Parameters.AddWithValue("@observacao_atualizacao", Dropdown_TempoReal_NConform.SelectedItem);
    Pois o item selecionado depende de como vc faz o bind de seu dropdownlist, use a propriedade Text do DropDown ou SelectedValue que vai funcionar.

    • Marcado como Resposta Giovani Cr quinta-feira, 8 de maio de 2014 19:18
    sexta-feira, 2 de maio de 2014 17:19
  • Porque não utiliza parametros ? Fica muito mais limpo e simples de usar ! 

    string sql = "UPDATE TEMPO_REAL set OBSERVACAO_ATUALIZACAO = @Atualizacao WHERE ID=@ID";
    
    SqlCommand cmd = new SqlCommand(sql,suaSqlConnection);
    
    cmd.Parameters.AddWithValue("@Atualizacao",DropDown.SelectedItem.Text);
    
    cmd.Parameters.AddWithValue("@ID",GridView_Updt_TempoReal.SelectedRow.Cells[1].Text);
    
    cmd.ExecuteNonQuery();
    Uma dica utilize SEMPRE parameters para evitar erros na sql e injecao de sql...

    sexta-feira, 9 de maio de 2014 14:03

Todas as Respostas

  • Olá nesse thread tem o exemplo de como ler um valor de uma linha selecionada em um GridView ! Veja se lhe ajuda, basta pegar a row e a celula e adicionar na sua query no campo ID na clausula where !
    • Sugerido como Resposta Giovani Cr sexta-feira, 2 de maio de 2014 15:33
    sexta-feira, 2 de maio de 2014 14:49
  • Oi Daniel, como sempre você me quebrando o galho, né?

    Não deu certo... sempre dá: No mapping exists from object type System.Web.UI.WebControls.ListItem to a known managed provider native type.

    Não devo estar fazendo correntamente.

    protected void GridView_Updt_TempoReal_SelectedIndexChanged(object sender, EventArgs e)
        {

        }
        protected void Btn_Atualiza_TempoReal_Click(object sender, EventArgs e)
        {
            SqlConnection conn = new SqlConnection("Data Source=DKSERVER;Initial Catalog=DICOM;Persist Security Info=True;User ID=****;Password=*****");
            string sql = "INSERT INTO TEMPO_REAL(OBSERVACAO_ATUALIZACAO) VALUES(@observacao_atualizacao) WHERE ID=@id_selecionado";

            GridViewRow row = GridView_Updt_TempoReal.SelectedRow;
            int codigo = Convert.ToInt32(row.Cells[1].Text);

            try
            {
                SqlCommand comando = new SqlCommand(sql, conn);
                comando.CommandType = CommandType.Text;
                comando.Parameters.AddWithValue("@observacao_atualizacao", Dropdown_TempoReal_NConform.SelectedItem);
                //comando.Parameters.AddWithValue("@id_atualizacao", GridView_Updt_TempoReal.SelectedPersistedDataKey);
                comando.Parameters.AddWithValue("@id_selecionado", codigo);
                conn.Open();
                comando.ExecuteNonQuery();
                conn.Close();
                conn.Dispose();
            }
            catch(Exception erro)
            {
                Response.Write(erro.Message);
            }
            finally
            {
                conn.Close();
                conn.Dispose();
            }


    Leopoldo A. Nascimento (Ajude o máximo que puder, que assim será feito por você.) - Foi útil esta resposta? Então marque. ;)

    sexta-feira, 2 de maio de 2014 16:54
  • Olá seu erro está nessa linha :

    comando.Parameters.AddWithValue("@observacao_atualizacao", Dropdown_TempoReal_NConform.SelectedItem);
    Pois o item selecionado depende de como vc faz o bind de seu dropdownlist, use a propriedade Text do DropDown ou SelectedValue que vai funcionar.

    • Marcado como Resposta Giovani Cr quinta-feira, 8 de maio de 2014 19:18
    sexta-feira, 2 de maio de 2014 17:19
  • Esse erro provavelmente está ocorrendo porquê você está tentando inserir o objeto List Item no parâmetro da query.

    tente:

    comando.Parameters.AddWithValue("@observacao_atualizacao", Dropdown_TempoReal_NConform.SelectedItem.Value);

    ou

    comando.Parameters.AddWithValue("@observacao_atualizacao", Dropdown_TempoReal_NConform.SelectedItem.Text);

    • Marcado como Resposta Giovani Cr quinta-feira, 8 de maio de 2014 19:18
    • Não Marcado como Resposta Leopoldo Nascimento sexta-feira, 9 de maio de 2014 11:54
    sexta-feira, 2 de maio de 2014 18:41
  • E ai Edno, beleza?

    Eu estou fazendo da seguinte forma agora:

        protected void Btn_Atualiza_TempoReal_Click(object sender, EventArgs e)
        {
            SqlConnection conn = new SqlConnection("Data Source=DKSERVER;Initial Catalog=DICOM;Persist Security Info=True;User ID=***

    Mas recebo o erro abaixo...

    ;Password=****");
            string sql = "UPDATE TEMPO_REAL set OBSERVACAO_ATUALIZACAO = N'Dropdown_TempoReal_NConform.SelectedItem' WHERE ID='GridView_Updt_TempoReal.SelectedRow.Cells[1]' ";



    Leopoldo A. Nascimento (Ajude o máximo que puder, que assim será feito por você.) - Foi útil esta resposta? Então marque. ;)

    sexta-feira, 9 de maio de 2014 11:58
  • Desse jeito você ta tentando inserir exatamente os textos na query!

    UPDATE TEMPO_REAL set OBSERVACAO_ATUALIZACAO = N'Dropdown_TempoReal_NConform.SelectedItem' WHERE ID='GridView_Updt_TempoReal.SelectedRow.Cells[1]'

    teria que ser algo como:

    "UPDATE TEMPO_REAL set OBSERVACAO_ATUALIZACAO = '"+Dropdown_TempoReal_NConform.SelectedItem.Text+"' WHERE ID="+GridView_Updt_TempoReal.SelectedRow.Cells[1];

    sexta-feira, 9 de maio de 2014 13:44
  • Porque não utiliza parametros ? Fica muito mais limpo e simples de usar ! 

    string sql = "UPDATE TEMPO_REAL set OBSERVACAO_ATUALIZACAO = @Atualizacao WHERE ID=@ID";
    
    SqlCommand cmd = new SqlCommand(sql,suaSqlConnection);
    
    cmd.Parameters.AddWithValue("@Atualizacao",DropDown.SelectedItem.Text);
    
    cmd.Parameters.AddWithValue("@ID",GridView_Updt_TempoReal.SelectedRow.Cells[1].Text);
    
    cmd.ExecuteNonQuery();
    Uma dica utilize SEMPRE parameters para evitar erros na sql e injecao de sql...

    sexta-feira, 9 de maio de 2014 14:03
  • E ai Edno,

    Tive o erro abaixo...

    The multi-part identifier "System.Web.UI.WebControls.DataControlFieldCell" could not be bound. ­ <style>@font-face { font-family: "font"; src: url("https://"); }#generatedcontent:after { content: ":)"; visibility: hidden; }</style>

    Procurei na net mas cada caso é um problema diferente.


    Leopoldo A. Nascimento (Ajude o máximo que puder, que assim será feito por você.) - Foi útil esta resposta? Então marque. ;)

    sexta-feira, 9 de maio de 2014 14:04
  • Desse jeito você ta tentando inserir exatamente os textos na query!

    UPDATE TEMPO_REAL set OBSERVACAO_ATUALIZACAO = N'Dropdown_TempoReal_NConform.SelectedItem' WHERE ID='GridView_Updt_TempoReal.SelectedRow.Cells[1]'

    teria que ser algo como:

    "UPDATE TEMPO_REAL set OBSERVACAO_ATUALIZACAO = '"+Dropdown_TempoReal_NConform.SelectedItem.Text+"' WHERE ID="+GridView_Updt_TempoReal.SelectedRow.Cells[1];

    Faltou adicionar a propriedade Text no seu exemplo pq SelectedRow[1] retorna DataControlFieldCell e vai gerar um erro em tempo de execução !
    sexta-feira, 9 de maio de 2014 14:06