Página 1 de 1

Encadeamento de combobox com datagrid view

Enviado: Seg Jun 05, 2017 1:25 pm
por Bruno 33
Boa tarde, sou novo a programar em c# e venho pedir um pouco da vossa ajuda.

Criei uma view para obter a tabela para carregar na datagridview. Com essa view também carreguei os dados da coluna que pretendo em cada combobox, como mostro no exemplo:
Aqui carrego os dados na datagridview:
Sem Título1.png
Sem Título1.png (28.57 KiB) Exibido 30995 vezes
E carrego os dados na combobox com a mesma view e desta forma:
Sem Título2.png
Sem Título2.png (24.99 KiB) Exibido 30995 vezes
Primeiro problema - Queria retirar os nomes repetidos que aparecem na combobox.

Segundo problema - Queria ao selecionar o tipo de produto na combobox que só aparecessem as linhas que tivessem aquele produto.

esta é a imagem que mostra os dados da combobox repetidos e a datagridview carregada com os dados:
Sem Título.png
Sem Título.png (44.04 KiB) Exibido 30995 vezes
Alguém me pode ajudar?

Re: Encadeamento de combobox com datagrid view

Enviado: Seg Jun 05, 2017 2:59 pm
por webmaster
Primeiro problema - Queria retirar os nomes repetidos que aparecem na combobox.

Entao crie o adapter com o SQL correto para isso.

Segundo problema - Queria ao selecionar o tipo de produto na combobox que só aparecessem as linhas que tivessem aquele produto.

Use a propriedade filter to BindingSource

Re: Encadeamento de combobox com datagrid view

Enviado: Qua Jun 07, 2017 3:34 pm
por Bruno 33
Boa tarde webmaster, como sou novo ainda não consegui chegar à solução.
Será que podes colocar um exemplo prático para cada uma das minhas questões?

Obrigado por me estares ajudar

Re: Encadeamento de combobox com datagrid view

Enviado: Qua Jun 07, 2017 4:35 pm
por webmaster
Qual versao do Visual Studio? Qual banco de dados?

Re: Encadeamento de combobox com datagrid view

Enviado: Qua Jun 07, 2017 5:50 pm
por Bruno 33
Bom dia, a parte do carregamento das combobox e o encadeamento das duas combobox já está resolvido.

2015 Desktop e banco de dados sql

O código que utilizei foi o seguinte:
private void Form2_Load(object sender, EventArgs e)
{
SqlDataAdapter sda = new SqlDataAdapter("SELECT DISTINCT Tipo FROM ListaRequisicoes ", con);
DataTable dt = new DataTable();
sda.Fill(dt);
comboBox1.Items.Clear();
comboBox1.Items.Add("---SELECT---");
foreach(DataRow Row in dt.Rows)
{
comboBox1.Items.Add(Row["Tipo"].ToString());
}
}

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
SqlDataAdapter sda = new SqlDataAdapter("SELECT DISTINCT Requerente FROM ListaRequisicoes WHERE Tipo = '"+ comboBox1.Text +"'", con);
DataTable dt = new DataTable();
sda.Fill(dt);
comboBox2.Items.Clear();
foreach(DataRow AB in dt.Rows)
{
comboBox2.Items.Add(AB["Requerente"].ToString());
}
}

Agora falta me a segunda questão, que é colocar a tabela aparecer na datagridview e depois ao selecionar na combobox filtrar na datagridview.

Agradeço se me puderes ajudar

Re: Encadeamento de combobox com datagrid view

Enviado: Qui Jun 08, 2017 7:58 am
por Bruno 33
Bom dia, também já consigo colocar aparecer a tabela na datagridview e filtrar pelo que selecciono na combobox, mas o problema é que as combobox estão a repetir os nomes porque alterei a query em relação ao código que coloquei no post anterior. E outro problema, só filtra na datagridview a primeira combobox a segunda já não consigo filtrar.

vou colocar a imagem a mostrar o exemplo:
Sem Título.png
Sem Título.png (43.34 KiB) Exibido 30948 vezes
O código é este:

private void Form2_Load(object sender, EventArgs e)
{
SqlDataAdapter sda = new SqlDataAdapter("SELECT * FROM ListaRequisicoes ", con);
DataTable dt = new DataTable();
sda.Fill(dt);
comboBox1.Items.Clear();
comboBox1.Items.Add("---SELECT---");
foreach(DataRow Row in dt.Rows)
{
comboBox1.Items.Add(Row["Tipo"].ToString());
}

dataGridView1.DataSource = dt;
}

//carrega a segunda combobox encadeada com a primeira combobox
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
SqlDataAdapter sda = new SqlDataAdapter("SELECT * FROM ListaRequisicoes WHERE Tipo = '"+ comboBox1.Text +"'", con);
DataTable dt = new DataTable();
sda.Fill(dt);
comboBox2.Items.Clear();
foreach(DataRow AB in dt.Rows)
{
comboBox2.Items.Add(AB["Requerente"].ToString());
}

dataGridView1.DataSource = dt;
}

Re: Encadeamento de combobox com datagrid view

Enviado: Qui Jun 08, 2017 8:27 pm
por Bruno 33
Boa noite, ninguém consegue colocar um exemplo prático de encadear duas combobox a filtrar na tabela da datagridview?

O que eu estou a pedir está muito confuso? Estou a perguntar uma vez que não estou a receber ajuda de ninguém

Re: Encadeamento de combobox com datagrid view

Enviado: Sex Jun 09, 2017 1:59 pm
por webmaster
Seja qual for o BindingSource/Adapter que estiver preenchendo o combobox, mude o SQL e adicione o DISTINCT na clausula. Isso fara ele retornar uma lista de elementos unicos.

PS: ninguem aqui eh obrigado a responder perguntas. Este eh um espaco livre para troca de ideias, duvidas e sugestoes. Todo conhecimento eh bem vindo, TODO! Quem aqui ajuda o faz de boa vontade e sem nada receber em troca, alem do reconhecimento de poder colaborar com um colega de profissao. Portanto, sejamos educados em aguardar pacientemente que alguma ajuda venha (se vier) e enquanto o fazemos, porque nao dedicar um pouco de tempo para ajudar um outro colega com uma duvida a qual voce provavelmente sabera a resposta?

Re: Encadeamento de combobox com datagrid view

Enviado: Sex Jun 09, 2017 2:30 pm
por Bruno 33
Boa tarde, peço desculpa se fui mal educado, não foi a minha intenção. Só perguntei uma vez que a questão para a minha dúvida poderia estar confusa.

Eu sei dessa parte do distinct, o problema é que se colocar o distinct tenho de criar um novo bindingsource e depois já não filtra na datagridview, uma vez que são bindingsource diferentes.

Mais uma vez a minha intenção nunca foi ser ofensivo com ninguém, pelo contrário, estou a gostar do feedback do vosso fórum e a gostar por pertencer à vossa comunidade. Sempre que posso e descubro soluções para problemas vou colocando para ajudar colegas de profissão.