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

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

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

Aceitar