jeudi 26 février 2015

Textbox event for autocomplete for gridview in winform

I've been looking online for the correct event to use for a textbox to auto-generate suggestions like google.com so I don't have to type the whole cell value to find what I'm looking for. Currently, I have a button where when clicked it will filter the grid to what I ask for, but not just using the textbox to filter. I know there's Keypress, textchanged, etc. and I tried the different events to see if the datagridview filters as I type. No success. The key press event doesn't filter as I type. The textchanged event won't let me type in the textbox. So how can I accomplish this?


Code:



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace SampleARDUserGroup
{
public partial class FirstPage : Form
{
SqlConnection con;
SqlDataAdapter adap;
DataSet ds;
SqlCommandBuilder cmbl;
public FirstPage()
{
InitializeComponent();
}

private void FirstPage_Load(object sender, EventArgs e)
{


try
{
con = new SqlConnection();
con.ConnectionString = "My Data Source";
con.Open();
adap = new SqlDataAdapter("select RowID as 'ID',UserID as 'User ID', FirstName as 'First Name', LastName as 'Last Name', email as 'E-mail' from JoshTestTable", con);
ds = new System.Data.DataSet();
adap.Fill(ds, "User_Details");
DGV1.DataSource = ds.Tables[0];
DGV1.Columns[0].Visible = false;
DGV1.Columns[2].Visible = false;
DGV1.Columns[3].Visible = false;
DGV1.Columns[4].Visible = false;
}
catch (Exception ex)
{
MessageBox.Show("Error\n" + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}

private void btnSearch_Click(object sender, EventArgs e)
{
con = new SqlConnection();
con.ConnectionString = "My Data Source";
SqlDataAdapter sda = new SqlDataAdapter("Select UserID,FirstName,LastName,Email FROM JoshTestTable where UserID like '%" + txtSearch.Text.Trim() + "%' OR FirstName like '%" + txtSearch.Text.Trim() + "%' OR FirstName like '%" + txtSearch.Text.Trim() + "%' OR LastName like '%" + txtSearch.Text.Trim() + "%' OR Email like '%" + txtSearch.Text.Trim() + "%'", con);
DataTable dt = new DataTable();
sda.Fill(dt);
DGV1.DataSource = dt;
DGV1.Columns[1].Visible = false;
DGV1.Columns[2].Visible = false;
DGV1.Columns[3].Visible = false;

}

private void linkLabel3_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
AddDeleteUsers f2 = new AddDeleteUsers();
f2.ShowDialog();
}

private void AddUsersToGroupsLink_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
AddUsersToGroups f3 = new AddUsersToGroups();
f3.ShowDialog();
}

private void AddGroupsToUsersLink_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
AddGroupsToUsers f4 = new AddGroupsToUsers();
f4.ShowDialog();
}

private void txtSearch_TextChanged(object sender, EventArgs e)
{
AutoCompleteStringCollection namesCollection = new AutoCompleteStringCollection();

SqlConnection con = new SqlConnection();
con.ConnectionString = "My Data Source";
con.Open();
String query = "select UserID from JoshTestTable where UserID like '%" + txtSearch.Text + "%'";
SqlCommand cmd = new SqlCommand(query, con);
SqlDataReader rr = cmd.ExecuteReader();
rr.Read();
while (rr.Read())
namesCollection.Add(rr["UserID"].ToString());
rr.Close();
txtSearch.AutoCompleteMode = AutoCompleteMode.Suggest;
txtSearch.AutoCompleteSource = AutoCompleteSource.CustomSource;
txtSearch.AutoCompleteCustomSource = namesCollection;
}
}
}

Aucun commentaire:

Enregistrer un commentaire