none
Como faço igual o exemplo? RRS feed

  • Pergunta

  • boa tarde pessoal!

    como faço pra fazer um parametrizador igual o da imagem do link: http://suporte.softwell.com.br/maker/manual/image312.jpg;

    preciso montar um filtro de relatorio, utilizo win form, c#, visual studio 2008 e sql server 2005.

    meu filtro tem que ser dinamico conforme a tabela de clientes é atualizada o filtro do parametro tamem recebe o dados modificado automaticamente., e quero colocar um checkbox ou passar esse parametro pra outra caixa pra enterder que esse é o paramentro a ser utilizado.

    se puderem me ajudar...

    atenciosamente,

    tiago.

    terça-feira, 27 de julho de 2010 17:24

Respostas

  • Dá uma olhada nesse codigo e poem depois as suas duvidas ai

    using System;
    using System.Collections.Generic;
    using System.Data.SqlClient;
    using System.Windows.Forms;
    using MSDN.Properties;
    
    namespace MSDN {
      public partial class Form1 : Form {
        public Form1() {
          InitializeComponent();
    
          this.Load += new EventHandler(Form1_Load);
          comboBox1.SelectedIndexChanged += new EventHandler(comboBox1_SelectedIndexChanged);
          checkedListBox1.ItemCheck += new ItemCheckEventHandler(checkedListBox1_ItemCheck);
        }
    
        void Form1_Load(object sender, EventArgs e) {
          comboBox1.Items.Clear();
          comboBox1.DisplayMember = "Name";
          comboBox1.ValueMember = "ID";
          comboBox1.DataSource = Tabelas.GetData();
        }
        void comboBox1_SelectedIndexChanged(object sender, EventArgs e) {
          checkedListBox1.Items.Clear();
          listBox1.Items.Clear();
    
          if (comboBox1.SelectedValue is Int32) {
            var table_id = Convert.ToInt32(comboBox1.SelectedValue);
            var colunas = Tabelas.GetColunas(table_id);
            checkedListBox1.Items.AddRange(colunas);
          }
        }
        void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e) {
          switch (e.NewValue) {
            case CheckState.Checked:
              listBox1.Items.Add(checkedListBox1.Items[e.Index]);
              break;
            case CheckState.Unchecked:
              listBox1.Items.Remove(checkedListBox1.Items[e.Index]);
              break;
            case CheckState.Indeterminate:
              break;
          }
        }
      }
    
      public class Tabelas {
        public int ID { get; set; }
        public string Name { get; set; }
    
        public static Tabelas[] GetData() {
          var result = new List<Tabelas>();
          var connection = new SqlConnection(Settings.Default.ConnectionString);
          try {
            connection.Open();
    
            var command = connection.CreateCommand();
            command.CommandText = "select object_id, name from sys.tables";
    
            var reader = command.ExecuteReader();
            while (reader.Read()) {
              result.Add(new Tabelas() {
                ID = Convert.ToInt32(reader["object_id"]),
                Name = Convert.ToString(reader["name"])
              });
            }
          } finally {
            connection.Dispose();
          }
          return result.ToArray();
        }
    
        public static string[] GetColunas(int table_id) {
          var result = new List<string>();
          var connection = new SqlConnection(Settings.Default.ConnectionString);
          try {
            connection.Open();
    
            var command = connection.CreateCommand();
            command.CommandText = "select name from sys.columns where object_id = @table_id";
            command.Parameters.AddWithValue("@table_id", table_id);
    
            var reader = command.ExecuteReader();
            while (reader.Read()) {
              result.Add(Convert.ToString(reader["name"]));
            }
          } finally {
            connection.Dispose();
          }
          return result.ToArray();
        }
      }
    }
    
    


    What would Brian Boitano do ?
    ((2B || !2B) is Question) ? Se não da certo como voce esta fazendo... Tente fazer de um jeito totalmente diferente....
    quarta-feira, 28 de julho de 2010 14:44
    Moderador
  • Tiago,

    Não entendi muito bem porque a nova habilitação iria influenciar tanto a sua aplicação.

    Imagine que você tenha que escolher o modelo de habilitação em um ComboBox (Windows Forms) por exemplo. Se sempre esse ComboBox fosse populado (diretamente ou por data binding) com os dados do banco e um novo registro fosse incluido na tabela de habilitação, o usuário estaria apto a selecionar essa nova habilitação no ComboBox.

    Att.

    Ari C. Raimundo
    MCAD, MCTS
    http://araimundo.blogspot.com  

    sexta-feira, 30 de julho de 2010 22:51
    Moderador

Todas as Respostas

  • select <br/>
    	sysobjects.id as ID, <br/>
    	sysobjects.name as Tabela, <br/>
    	syscolumns.name as Coluna,<br/>
    	systypes.name as Tipo<br/>
    from <br/>
    	sysobjects <br/>
    	join syscolumns on (sysobjects.id = syscolumns.id and sysobjects.xtype = 'U')<br/>
    	join systypes on (syscolumns.xtype = systypes.xtype)<br/>
    where <br/>
    	sysobjects.name <> 'dtproperties'<br/>
    
    
    Essa query acima vai te trazer todas as tabelas e os campos das mesmas que existem no seu servidor... atraves dela vc pode popular os campos de seu formulario e conforme a seleção vc pode montar a query dinamicamente
    What would Brian Boitano do ?
    ((2B || !2B) is Question) ? Se não da certo como voce esta fazendo... Tente fazer de um jeito totalmente diferente....
    terça-feira, 27 de julho de 2010 17:39
    Moderador
  • CARA NAO ENTENDI:

    VEJA ABAIXO:

    "TABELA CHEIA"                                     "TABELA COM OS  CHECKBOX DA TABELA CHEIA"

    |____________________________|               |___________________________|

    |  [ ]           ITEM 01                     |               |                                               |

    |  [ ]           ITEM 02                     |               |                                               |

    |  [ ]           ITEM 03                     |               |                                               |

    |  [ ]           ITEM 04                     |               |                                               |

    |  [ ]           ITEM 05                     |               |                                               |

    |____________________________|               |___________________________|

     

    DEU PRA ENTENDER O QUE QUERO FAZER?

    terça-feira, 27 de julho de 2010 18:21
  • A duvida é sobre como pegar os campos das tabelas para popular o CheckBoxList ou como fazer os items checkados aparecerem num ListBox ao lado... agora fui eu que não entendi...
    What would Brian Boitano do ?
    ((2B || !2B) is Question) ? Se não da certo como voce esta fazendo... Tente fazer de um jeito totalmente diferente....
    terça-feira, 27 de julho de 2010 21:52
    Moderador
  • bom dia!

    o que nao sei amigo é ter os checkbox no datagrid e nem fazer com que o segundo grid receba os dados checkados do primeiro datagrid.

     

     

    quarta-feira, 28 de julho de 2010 11:36
  • Dá uma olhada nesse codigo e poem depois as suas duvidas ai

    using System;
    using System.Collections.Generic;
    using System.Data.SqlClient;
    using System.Windows.Forms;
    using MSDN.Properties;
    
    namespace MSDN {
      public partial class Form1 : Form {
        public Form1() {
          InitializeComponent();
    
          this.Load += new EventHandler(Form1_Load);
          comboBox1.SelectedIndexChanged += new EventHandler(comboBox1_SelectedIndexChanged);
          checkedListBox1.ItemCheck += new ItemCheckEventHandler(checkedListBox1_ItemCheck);
        }
    
        void Form1_Load(object sender, EventArgs e) {
          comboBox1.Items.Clear();
          comboBox1.DisplayMember = "Name";
          comboBox1.ValueMember = "ID";
          comboBox1.DataSource = Tabelas.GetData();
        }
        void comboBox1_SelectedIndexChanged(object sender, EventArgs e) {
          checkedListBox1.Items.Clear();
          listBox1.Items.Clear();
    
          if (comboBox1.SelectedValue is Int32) {
            var table_id = Convert.ToInt32(comboBox1.SelectedValue);
            var colunas = Tabelas.GetColunas(table_id);
            checkedListBox1.Items.AddRange(colunas);
          }
        }
        void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e) {
          switch (e.NewValue) {
            case CheckState.Checked:
              listBox1.Items.Add(checkedListBox1.Items[e.Index]);
              break;
            case CheckState.Unchecked:
              listBox1.Items.Remove(checkedListBox1.Items[e.Index]);
              break;
            case CheckState.Indeterminate:
              break;
          }
        }
      }
    
      public class Tabelas {
        public int ID { get; set; }
        public string Name { get; set; }
    
        public static Tabelas[] GetData() {
          var result = new List<Tabelas>();
          var connection = new SqlConnection(Settings.Default.ConnectionString);
          try {
            connection.Open();
    
            var command = connection.CreateCommand();
            command.CommandText = "select object_id, name from sys.tables";
    
            var reader = command.ExecuteReader();
            while (reader.Read()) {
              result.Add(new Tabelas() {
                ID = Convert.ToInt32(reader["object_id"]),
                Name = Convert.ToString(reader["name"])
              });
            }
          } finally {
            connection.Dispose();
          }
          return result.ToArray();
        }
    
        public static string[] GetColunas(int table_id) {
          var result = new List<string>();
          var connection = new SqlConnection(Settings.Default.ConnectionString);
          try {
            connection.Open();
    
            var command = connection.CreateCommand();
            command.CommandText = "select name from sys.columns where object_id = @table_id";
            command.Parameters.AddWithValue("@table_id", table_id);
    
            var reader = command.ExecuteReader();
            while (reader.Read()) {
              result.Add(Convert.ToString(reader["name"]));
            }
          } finally {
            connection.Dispose();
          }
          return result.ToArray();
        }
      }
    }
    
    


    What would Brian Boitano do ?
    ((2B || !2B) is Question) ? Se não da certo como voce esta fazendo... Tente fazer de um jeito totalmente diferente....
    quarta-feira, 28 de julho de 2010 14:44
    Moderador
  • Tiago,

    Só complementando a resposta dos colegas, ao fazer uma consulta dos metadados existentes no SQL Server é recomendado trabalhar com as views INFORMATION_SCHEMA.XXX, onde XXX são os metadados que desejamos obter.

    Por exemplo, para obter as colunas de uma tabela qualquer faríamos a consulta:

    SELECT COLUMN_NAME
    FROM SeuBancoDados.INFORMATION_SCHEMA.COLUMNS
    WHERE TABLE_NAME = N'SuaTabela';

    Não é recomendado trabalhar com as tabelas de sistema porque estas podem ser alteradas de uma versão para outra do SQL Server.

    Mais informações no link abaixo:

    Information Schema Views (Transact-SQL)
    http://msdn.microsoft.com/en-us/library/ms186778.aspx

    Espero ter ajudado.

    Att.

    Ari C. Raimundo
    MCAD, MCTS
    http://araimundo.blogspot.com  

    sexta-feira, 30 de julho de 2010 12:51
    Moderador
  • BOM DIA!

    JUSTAMENTE POR ESSA "ATUALIZAÇÃO" QUE PODE ACONTECER DE UMA HORA PRA OUTRA QUE QUERO USAR OS PROPRIOS CAMPOS DE DADOS DA TABELA . IMAGINE QUE PRECISO FAZER UMA CONSULTA EM UM BANCO DE DADOS FILTRANDO APENAS FUNCIONARIOS QUE SEJEM MOTORISTA QUE TENHAM HABILITACAO A POREM MEU FILTRO NAO TEM ESSE MODELO DE  HABILITACAO CADASTRADA TEM SOMENTE A HABILITACAO AB, AC, AD, AE?

    SEI QUE O EXEMPLO NAO É MUITO BOM MAS SÓ PRA ILUSTRAR.

    sexta-feira, 30 de julho de 2010 13:25
  • Tiago,

    Não entendi muito bem porque a nova habilitação iria influenciar tanto a sua aplicação.

    Imagine que você tenha que escolher o modelo de habilitação em um ComboBox (Windows Forms) por exemplo. Se sempre esse ComboBox fosse populado (diretamente ou por data binding) com os dados do banco e um novo registro fosse incluido na tabela de habilitação, o usuário estaria apto a selecionar essa nova habilitação no ComboBox.

    Att.

    Ari C. Raimundo
    MCAD, MCTS
    http://araimundo.blogspot.com  

    sexta-feira, 30 de julho de 2010 22:51
    Moderador