Erro ao vincular componente dataGridView

18/09/2013

0

Bom dia pessoal,

Alguém poderia me ajudar a resolver o problema que está ocorrendo no código abaixo?

A ideia é inserir os dados em um datagrid assim que o usuário informa um valor no campo de busca. Mas neste método ele está reclamando de dois comandos:

1) grdExpenses.Columns.Add(sqldr.GetName(i).ToString(), sqldr.GetName(i).ToString()); //ERRO: No overload for method ''Add'' takes ''2'' arguments

2) grdExpenses.Rows.Add(linhaDados); //ERRO: ''System.Web.UI.WebControls.GridViewRowCollection'' does not contain a definition for ''Add'' and no extension method ''Add'' accepting a first argument of type ''System.Web.UI.WebControls.GridViewRowCollection'' could be found

protected void Button1_Click(object sender, EventArgs e)
        {
         
            SqlDataReader sqldr = null;
            SqlConnection con = null;
            SqlCommand cmd = null;

            try
            {
                string ConnectionString = "Data Source=SIDI06;Initial Catalog=dbIntranetAdm;Integrated Security=SSPI";
                con = new SqlConnection(ConnectionString);
                con.Open();
                
                string CommandText = "SELECT * " + "FROM exp_expenses_details " + "WHERE (expense_id LIKE @criterio)";
                
                cmd = new SqlCommand(CommandText);
                cmd.Connection = con;
                
                cmd.Parameters.Add(
                    new SqlParameter(
                    "@criterio",                                 
                    System.Data.SqlDbType.NVarChar, 
                    40,                                              
                    "expense_id"));

                cmd.Parameters["@criterio"].Value = TextBox4.Text + "%";
               
                sqldr = cmd.ExecuteReader();
                //lbDados.Items.Clear();

                int nColunas = sqldr.FieldCount;

                for (int i = 0; i < nColunas; i++)
                {
                    grdExpenses.Columns.Add(sqldr.GetName(i).ToString(), sqldr.GetName(i).ToString());
                }
                                
                string[] linhaDados = new string[nColunas];
                
                while (sqldr.Read())
                {
                    //lbDados.Items.Add(sqldr["expense_id"].ToString());

                    for (int a = 0; a < nColunas; a++)
                        {
                            if (sqldr.GetFieldType(a).ToString() == "System.Int32")
                            {
                                linhaDados[a] = sqldr.GetInt32(a).ToString();
                            }
                            if (sqldr.GetFieldType(a).ToString() == "System.String")
                            {
                                linhaDados[a] = sqldr.GetString(a).ToString();
                            }
                            if (sqldr.GetFieldType(a).ToString() == "System.DateTime")
                            {
                                linhaDados[a] = sqldr.GetDateTime(a).ToString();
                            } 
                        }
                        
                        grdExpenses.Rows.Add(linhaDados);                                                          
                }
            }
            catch (Exception ex)
            {
                ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "sua-mensagem", "alert(''Informe um número a procurar'')", true);
            }
            finally
            {
                
                if (sqldr != null)
                    sqldr.Close();
                if (con.State == ConnectionState.Open)
                    con.Close();
            }
        }


Obrigado mais uma vez!
Bruno

Bruno

Responder

Posts

19/09/2013

Bruno

Desculpe pela dúvida, acho que não fui claro.

Resumindo o que realmente estou pensando:

Assim que o usuário informar dados no campo de busca, dados contidos no BD SQL Server, ele retorna a pesquisa em um componente DATAGRIDVIEW.

Não estou conseguindo deixar nesse formato, se alguém puder me ajudar, agradeço muito!
Responder

19/09/2013

Joel Rodrigues

Alguma coisa lhe impede de apenas atribuir o retorno da consulta ao DataGridView? É realmente preciso criar uma lista e adicionar as colunas dinamicamente?
Responder

19/09/2013

Bruno

Então pensei em algo assim:

[url]https://docs.google.com/document/d/1J-3_XmD5tMUj_SF37WkQSM0yzK96URBGayYuQM9TD3o/pub[/url]
Responder

20/09/2013

Joel Rodrigues

Sim, sim, tudo bem. Mas você pode configurara essas colunas em tempo de design e apenas associar o retorno da consulta ao DataGridView.
Responder

20/09/2013

Bruno

Eu acabei adaptando o código para ele listar o resultado no DataGridView assim que o usuário for digitando no campo de busca, ou seja, removi o botão procurar.

Segue o código abaixo. A única dúvida agora é com relação a string de conexão para acessar o BD (SQL Server 2005).

protected void TextBox2_TextChanged(object sender, EventArgs e)
        {
            SqlConnection conn = new SqlConnection(O QUE COLOCAR);

            //Separado
            string strSelect = "SELECT * FROM exp_expenses_details WHERE expense_id LIKE (@expense_id)";

            using (SqlConnection conn = new SqlConnection(SuaStringDeConexão))
            {
                SqlDataAdapter da = new SqlDataAdapter(strSelect, conn);
                da.SelectCommand.Parameters.AddWithValue("@expense_id", TextBox2.Text + "%");
                DataSet ds = new DataSet();
                da.Fill(ds, "exp_expenses_details");
                grdExpenses.DataSource = ds.Tables["exp_expenses_details"];
            }
        }
Responder

20/09/2013

Joel Rodrigues

A string de conexão que você estava utilizando não funciona?
Você precisa saber o nome/IP do servidor, o nome do banco e se vai acessar com usuário e senha ou com o usuário do Windows.
Neste site você encontra várias strings de conexão, inclusive de outros bancos, provavelmente vai encontrar aí o que precisa: [url]http://www.connectionstrings.com/sql-server/[/url].
Responder

20/09/2013

Bruno

Entendi. Tem como eu saber o endereço do servidor (DATA SOURCE) pelo SQL Server? Não encontrei esta informação.

"Password=mbm;Persist Security Info=True;User ID=sa;Initial Catalog=modelo_redex;Data Source=??? \\SQLEXPRESS"
Responder

20/09/2013

Joel Rodrigues

Quando você conecta no SQL Server Management Studio, não tem uma tela de login (Connect to Server)? Ali você já vê o nome do servidor (Server name).
Responder

20/09/2013

Bruno

Beleza, pode concluir o tópico.

Agradeço mais uma vez cara!
Responder

20/09/2013

Joel Rodrigues

Opa, que bom que pude ajudar de alguma forma, fico feliz.
Quando precisa, fique à vontade para abrir novos tópicos.

Tópico concluído.
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar