none
checkedlistbox RRS feed

  • Pergunta

  • Boa tarde pessoal...sou novato em programação C#...estou usando para desktop

    Gostaria de saber como posso fazer para configurar as colunas do datagrid atraves de um checkedlistbox que esta em outro form..

    por exemplo.. clico com o botao direito do mouse em seguida aparece as opcoes... seleciono a opcao visualizar campos... logo apos ter selecionado essa opcao abrirá um outro form com um checkedlistbox com os nomes das colunas do grid..ate ai tudo bem.. agora como posso fazer para quando eu ticar determinados campos eles sejam exbidos no grid...(os campos selecionados no checkedlistbox)..

     

    desde ja agradeco...

     

    um abraço a todos...

     

    T+

    sexta-feira, 2 de janeiro de 2009 18:45

Respostas

  • Olá Leonardo,

     

     leonardo_slash wrote:

    private void contextMenuStrip1_MouseClick(object sender, MouseEventArgs e)

    {

    if (e.Button == MouseButtons.Left) {

    teste teste = new teste(); --> Aqui me parece que você está instanciando o form de Pesquisa

    foreach (DataGridViewColumn coluna in this.dataGridView1.Columns)

    {

    teste.checkedListBox1.Items.Add(coluna.HeaderText, coluna.Visible); --> Aqui vc preenche as colunas

    }

    Consultas.teste compra = new teste(); --> Mas depois instancia o form de novo??? Porque?

    compra.ShowDialog();

    }

    }

     

     leonardo_slash wrote:

    e no form que esta o CheckedListBox nao preciso colocar nenhum codigo??

     

    Não precisa colocar nenhum código... A menos que você queira implementar alguma regra, como por exemplo, obrigar o usuário a deixar, pelo menos, uma coluna visível.

     

    Como é uma caixa de diálogo, você só precisa alterar a propriedade AcceptButton do formulário para apontar para o seu botão "OK", e a também alterar a propriedade CancelButton do formulário para apontar para o seu botão "Cancelar".

     

    Alterando essas propriedades, o formulário será fechado automaticamente quando o usuário clicar em um desses botões, e você ainda pode verificar qual botão o usuário clicou (o que é importante, pois se o usuário cancelar a janela, você deixa as colunas como estavam, independente do que ele marcou na caixa de diálogo):

     

    Code Snippet

     

     // ...

     

     DialogResult resultado = compra.ShowDialog();

     

     // Usuário clicou OK na caixa de diálogo?

     if (resultado == DialogResult.OK)

     {

    // Sim. Então mostra / esconde as colunas

    // ...

     }

     

     

    Abraços,

    Caio Proiete




    Caio Proiete
    http://www.caioproiete.com
    domingo, 11 de janeiro de 2009 08:18
    Moderador

Todas as Respostas

  • Olá Leonardo, seja bem-vindo ao fórum!

     

    Cada coluna do seu DataGridView possui uma propriedade Visible do tipo bool, que define se a coluna está visível ou não, e o controle CheckedListBox, tem uma coleção chamada CheckedItems, onde você consegue obter todos os itens que estão marcados (Checked).

     

    Assim, uma forma rápida de implementar o que você precisa, é definir a propriedade Visible de cada coluna do seu DataGridView dependendo se ele está presente ou não, na lista de itens marcados do CheckedListBox (CheckedItems).

     

    Um exemplo simples:

     

    Para adicionar as colunas do DataGridView no CheckedListBox:

     

    Code Snippet

     

     // Inicializa a lista de itens

     this.seuCheckedListBox.Items.Clear();

     

     // Percorre todas as colunas do DataGridView

     foreach (DataGridViewColumn coluna in this.seuDataGridView.Columns)

     {

    // Adiciona cada uma das colunas no CheckBoxList.

    // A propriedade Visible da coluna, define se o item está marcado ou não

    this.seuCheckedListBox.Items.Add(coluna.HeaderText, coluna.Visible);

     }

     

     

    Depois, quando o usuário clicar "OK" para fechar a caixa de diálogo, você mostra/esconde as colunas, dependendo dos itens que estiverem marcados no seu CheckedListBox:

     

    Code Snippet

     

     // Novamente, percorre todas as colunas do DataGridView

     foreach (DataGridViewColumn coluna in this.seuDataGridView.Columns)

     {

    // A propriedade Visible da coluna ser  true ou false,

    // dependendo se estiver ou nÆo marcado no CheckedBoxList

    coluna.Visible = this.seuCheckedListBox.CheckedItems.Contains(coluna.HeaderText);

     }

     

     

    Abraços,
    Caio Proiete




    Caio Proiete
    http://www.caioproiete.com
    sexta-feira, 2 de janeiro de 2009 20:13
    Moderador
  •  

    Caio muito obrigado pela atenção...

     

    E estou usando 2 forms.. um que está o grid e outro que está o checkedlistbox..

    como faço para carregar o meu checkedlistbox no outro form?

     

    desde já agradeço..

     

    T+

     

    segunda-feira, 5 de janeiro de 2009 10:37
  •  leonardo_slash wrote:

    E estou usando 2 forms.. um que está o grid e outro que está o checkedlistbox..

    como faço para carregar o meu checkedlistbox no outro form?

     

    Olá Leonardo,

     

    Para acessar o CheckedListBox que está no outro formulário, basta você alterar a propriedade Modifiers do CheckedListBox para public, para que ele fique visível para outras classes.

     

    Depois disso, basta você utilizar o controle, a partir da referência para esse formulário... Algo como:

     

    Code Snippet

     

     // Instancia o formulário

     FormColunas seuFormulario = new FormColunas();

     

     // Adiciona os itens...

     seuFormulario.seuCheckedListBox.Items.Add(...);

     

     // Mostra o formulário em forma de caixa de diálogo

     seuFormulario.ShowDialog();

     

     // Recupera os itens...

     foreach (...)

     {

    // ...

     }

     

     

    Abraços,

    Caio Proiete




    Caio Proiete
    http://www.caioproiete.com
    segunda-feira, 5 de janeiro de 2009 11:31
    Moderador
  • Caio desculpe minha Insistência é pq estou precisando muito dessa ajuda..

     

    Fiz o que vc tinha postado ai em cima, mas não deu certo as colunas da tabela estão ficando todas invisiveis..

    Acho que estou fazendo alguma coisa de errado..vou postar meu codigo aki pra vc ter uma nocao do que estou fazendo de errado ok...

     

    no form que está checkedlistbox.....

     

    private void button1_Click(object sender, EventArgs e)

    {

    FrmCliente cliente = new FrmCliente();

    checkedListBox1.Items.Clear();

    foreach (DataGridViewColumn coluna in cliente.dataGridView1.Columns)

    {

    this.checkedListBox1.Items.Add(coluna.HeaderText, coluna.Visible);

    }

    Close();

    }

     

     

    e no form que esta o grid estou fazendo assim....

     

     

    private void FrmCliente_Load(object sender, EventArgs e)

    {

    txtclientes.Text = Interface.FrmVenda.nome;

    teste teste = new teste();

    foreach (DataGridViewColumn coluna in this.dataGridView1.Columns)

    {

    coluna.Visible = teste.checkedListBox1.CheckedItems.Contains(coluna.HeaderText);

    }

    }

     

     

    agradeço desde já...

    um abraço...

    T+

    quarta-feira, 7 de janeiro de 2009 12:37
  • Olá Leonardo,

     

    Eu confesso que não entendi muito bem o código que você mostrou, então vou escrever o cenário que penso que você tenha aí na sua máquina:

     

    FormularioClientes

    Formulário que mostra uma lista de clientes com diversas colunas que contém as informações de cada cliente. Esse formulário tem um botão (Configurar Colunas), que abre um segundo formulário (FormularioColunas) que permite que o usuário selecione as colunas que quer ver ou não.

     

    FormularioColunas

    Formulario que mostra todos os nomes das colunas que aparecem no formulário, em um CheckedBoxList, para que o usuário marque / desmarque as colunas.

     

    É esse o cenário?

     

    Sendo esse o cenário que entendi, minha sugestão (acima) foi a seguinte:

     

    Lá no botão Configurar Colunas, do FormularioClientes, você instancia o FormularioColunas, lê as colunas do DataGridView, adiciona no CheckedListBox do FormularioColunas, e mostra esse formulário para o usuário em uma caixa de diálogo (ShowDialog):

     

    Code Snippet

     

     // Instancia o formulário

     FormularioColunas seuFormulario = new FormularioColunas();

     

     // Adiciona os itens...

     seuFormulario.seuCheckedListBox.Items.Add(...);

     

     // Mostra o formulário em forma de caixa de diálogo

     seuFormulario.ShowDialog();

     

     

    Quando você chama o ShowDialog, a caixa de diálogo é aberta, e a execução do código (que está abaixo do ShowDialog) fica em "pausa", até que o usuário feche a caixa de diálogo.

     

    Assim, quando o usuário terminar de selecionar as colunas que ele quer (ou não quer) que apareçam, você apenas lê os dados atuais da CheckedListBox que está na sua instância do FormularioColunas, e mostra (ou esconde) as colunas do DataGridView de acordo com as marcações do CheckedListBox:

     

    Code Snippet

     

     // Novamente, percorre todas as colunas do DataGridView

     foreach (DataGridViewColumn coluna in this.seuDataGridView.Columns)

     {

    // A propriedade Visible da coluna ser  true ou false,

    // dependendo se estiver ou nÆo marcado no CheckedBoxList

    coluna.Visible = seuFormulario.seuCheckedListBox.CheckedItems.Contains(coluna.HeaderText);

     }

     

     

    Abraços,

    Caio Proiete




    Caio Proiete
    http://www.caioproiete.com
    quarta-feira, 7 de janeiro de 2009 17:54
    Moderador
  • Bom dia Caio me desculpe pelo transtorno, mas pelo que entendi tenho que colocar esse codigo no evento click do botao que estou chamando o form configurar campos....

     

    vou postar o codigo que coloquei no botao...

     

    private void contextMenuStrip1_MouseClick(object sender, MouseEventArgs e)

    {

    if (e.Button == MouseButtons.Left) {

    teste teste = new teste();

    foreach (DataGridViewColumn coluna in this.dataGridView1.Columns)

    {

    teste.checkedListBox1.Items.Add(coluna.HeaderText, coluna.Visible);

    }

    Consultas.teste compra = new teste();

    compra.ShowDialog();

    }

    }

     

    nao sei se esta certo ate ai.. minha pergunta é a seguinte esse codigo que vou postar tbm preciso colocar no evento do botao???

     

    // Novamente, percorre todas as colunas do DataGridView

     foreach (DataGridViewColumn coluna in this.seuDataGridView.Columns)

     {

    // A propriedade Visible da coluna ser  true ou false,

    // dependendo se estiver ou nÆo marcado no CheckedBoxList

    coluna.Visible = seuFormulario.seuCheckedListBox.CheckedItems.Contains(coluna.HeaderText);

     }

     

    e no form que esta o CheckedListBox nao preciso colocar nenhum codigo??

     

    me desculpe pelo transtorno

     

    Desde de ja agradeco...

     

    Um abraco....

     

    quinta-feira, 8 de janeiro de 2009 12:43
  • Olá Leonardo,

     

     leonardo_slash wrote:

    private void contextMenuStrip1_MouseClick(object sender, MouseEventArgs e)

    {

    if (e.Button == MouseButtons.Left) {

    teste teste = new teste(); --> Aqui me parece que você está instanciando o form de Pesquisa

    foreach (DataGridViewColumn coluna in this.dataGridView1.Columns)

    {

    teste.checkedListBox1.Items.Add(coluna.HeaderText, coluna.Visible); --> Aqui vc preenche as colunas

    }

    Consultas.teste compra = new teste(); --> Mas depois instancia o form de novo??? Porque?

    compra.ShowDialog();

    }

    }

     

     leonardo_slash wrote:

    e no form que esta o CheckedListBox nao preciso colocar nenhum codigo??

     

    Não precisa colocar nenhum código... A menos que você queira implementar alguma regra, como por exemplo, obrigar o usuário a deixar, pelo menos, uma coluna visível.

     

    Como é uma caixa de diálogo, você só precisa alterar a propriedade AcceptButton do formulário para apontar para o seu botão "OK", e a também alterar a propriedade CancelButton do formulário para apontar para o seu botão "Cancelar".

     

    Alterando essas propriedades, o formulário será fechado automaticamente quando o usuário clicar em um desses botões, e você ainda pode verificar qual botão o usuário clicou (o que é importante, pois se o usuário cancelar a janela, você deixa as colunas como estavam, independente do que ele marcou na caixa de diálogo):

     

    Code Snippet

     

     // ...

     

     DialogResult resultado = compra.ShowDialog();

     

     // Usuário clicou OK na caixa de diálogo?

     if (resultado == DialogResult.OK)

     {

    // Sim. Então mostra / esconde as colunas

    // ...

     }

     

     

    Abraços,

    Caio Proiete




    Caio Proiete
    http://www.caioproiete.com
    domingo, 11 de janeiro de 2009 08:18
    Moderador