Array
(
)

Erro ao vincular componente dataGridView

Bruno
   - 18 set 2013

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
#Códigoprotected 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
   - 19 set 2013

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!

0
|
0

Joel Rodrigues
   - 19 set 2013

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

0
|
0

Bruno
   - 19 set 2013

Então pensei em algo assim:

https://docs.google.com/document/d/1J-3_XmD5tMUj_SF37WkQSM0yzK96URBGayYuQM9TD3o/pub

0
|
0

Joel Rodrigues
   - 20 set 2013

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

0
|
0

Bruno
   - 20 set 2013

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).

#Códigoprotected 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"];
}
}

0
|
0

Joel Rodrigues
   - 20 set 2013

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: http://www.connectionstrings.com/sql-server/.

0
|
0

Bruno
   - 20 set 2013

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"

0
|
0

Joel Rodrigues
   - 20 set 2013

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).

0
|
0

Bruno
   - 20 set 2013

Beleza, pode concluir o tópico.

Agradeço mais uma vez cara!

0
|
0

Joel Rodrigues
   - 20 set 2013

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

Tópico concluído.

0
|
0