none
Preencher DataGridView RRS feed

  • Pergunta

  • Galera gostaria de preencher o DataGridView com o que eu pesquisasse em uma textBox. Mas eu quero que a cada letra e filtre e reduza o numero de resultados automaticamente, sem apertar em nenhum botão. Não sei nem por onde começar me ajude.

    Detalhe, DataGridView está conectado com o banco de dados do Oracle, já consegui carregar mas só quando clico no button "Pesquisar".

    Por favor me ajudem!!!

    domingo, 12 de junho de 2016 00:44

Respostas

  • Bom dia WandersonLima,

    Aqui há uma exemplo completo:

    using System;
    using System.Data;
    using System.Windows.Forms;
    using System.Data.SqlClient;
    using System.Drawing;
    
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                string connectionString = "Data Source=.;Initial Catalog=pubs;Integrated Security=True";
                string sql = "SELECT * FROM Authors";
                SqlConnection connection = new SqlConnection(connectionString);
                SqlDataAdapter dataadapter = new SqlDataAdapter(sql, connection);
                DataSet ds = new DataSet();
                connection.Open();
                dataadapter.Fill(ds, "Author_table");
                connection.Close();
                dataGridView1.DataSource = ds;
                dataGridView1.DataMember = "Author_table";
    
            }
    
            private void button2_Click(object sender, EventArgs e)
            {
                printDocument1.Print();
            }
    
            private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
            {
                Bitmap bm = new Bitmap(this.dataGridView1.Width, this.dataGridView1.Height);
                dataGridView1.DrawToBitmap(bm, new Rectangle(0, 0, this.dataGridView1.Width, this.dataGridView1.Height));
                e.Graphics.DrawImage(bm, 0, 0);
            }
     
        }
    }
    

    Mais informações podem ser encontradas neste link.

    Atenciosamente.

    sexta-feira, 17 de junho de 2016 13:29

Todas as Respostas

  • Olá WandersonLima,

    segue alguns exemplos que encontrei que fazem essa filtro ao digitar:

    (dataGridViewFields.DataSource as DataTable).DefaultView.RowFilter = string.Format("Field = '{0}'", textBoxFilter.Text);

    string rowFilter = string.Format("[{0}] = '{1}'", columnName, filterValue);
    (myDataGridView.DataSource as DataTable).DefaultView.RowFilter = rowFilter;

    Set yourComboBox.AutoCompleteSource to AutoCompleteSource.ListItems; (se sua yourComboBox.Items já estiver com a tabela no banco preenchida)

    private void comboBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        char ch = e.KeyChar;
        string strToFind;
    
        // if first char
        if (lastChar == 0)
            strToFind = ch.ToString();
        else
            strToFind = lastChar.ToString() + ch;
    
        // set first char
        lastChar = ch;
    
        // find first item that exactly like strToFind
        int idx = comboBox1.FindStringExact(strToFind);
    
        // if not found, find first item that start with strToFind
        if (idx == -1) idx = comboBox1.FindString(strToFind);
    
        if (idx == -1) return;
    
        comboBox1.SelectedIndex = idx;
    
        e.Handled = true;
    }
    
    void comboBox1_GotFocus(object sender, EventArgs e)
    {
        // remove last char before select new item
        lastChar = (char) 0;
    }

    Também há mais algumas informações neste link.

    Atenciosamente.

    • Marcado como Resposta Thales F Quintas segunda-feira, 13 de junho de 2016 20:34
    • Não Marcado como Resposta WandersonLima terça-feira, 14 de junho de 2016 20:13
    segunda-feira, 13 de junho de 2016 20:11
  • Eu entendi mais ou menos meu código ficou assim:

     (dgvDados.DataSource as DataTable).DefaultView.RowFilter = string.Format("Field = '{0}'", txtDescricao.Text);
                string rowFilter = string.Format("[{0}] = '{1}'", dgvDados.Columns[1], txtDescricao.Text);
                (dgvDados.DataSource as DataTable).DefaultView.RowFilter = rowFilter;
    Mas não sei onde coloco ou se tenho que criar um método. Me ajuda ai.

    terça-feira, 14 de junho de 2016 20:13
  • Bom dia WandersonLima,

    Aqui há uma exemplo completo:

    using System;
    using System.Data;
    using System.Windows.Forms;
    using System.Data.SqlClient;
    using System.Drawing;
    
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                string connectionString = "Data Source=.;Initial Catalog=pubs;Integrated Security=True";
                string sql = "SELECT * FROM Authors";
                SqlConnection connection = new SqlConnection(connectionString);
                SqlDataAdapter dataadapter = new SqlDataAdapter(sql, connection);
                DataSet ds = new DataSet();
                connection.Open();
                dataadapter.Fill(ds, "Author_table");
                connection.Close();
                dataGridView1.DataSource = ds;
                dataGridView1.DataMember = "Author_table";
    
            }
    
            private void button2_Click(object sender, EventArgs e)
            {
                printDocument1.Print();
            }
    
            private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
            {
                Bitmap bm = new Bitmap(this.dataGridView1.Width, this.dataGridView1.Height);
                dataGridView1.DrawToBitmap(bm, new Rectangle(0, 0, this.dataGridView1.Width, this.dataGridView1.Height));
                e.Graphics.DrawImage(bm, 0, 0);
            }
     
        }
    }
    

    Mais informações podem ser encontradas neste link.

    Atenciosamente.

    sexta-feira, 17 de junho de 2016 13:29