Я всюду искал ответ на свой вопрос.Но я пока не смог найти удовлетворительного ответа.Теперь вот моя проблема.
У меня есть представление данных в C #, которое не связано ни с одним источником данных.Я хочу позволить пользователю вводить данные в один из столбцов.Что мне нужно сделать, это поддержать пользователя с автозаполнением.
Данные для автозаполнения поступают из базы данных.Я мог бы справиться с этим, но моя проблема в том, что предложения должны зависеть от символов, введенных пользователем.Например, если пользователь вводит «g» и мой запрос к базе данных возвращает «чеснок», автозаполнение должно показать это.
Это довольно просто для обычных текстовых полей.Но проблема с datagridview заключается в том, что я не могу прочитать символы, которые вводят пользователи при вводе. Событие изменения значения ячейки запускается после завершения редактирования.Слишком много данных в базе данных для одновременного добавления в источник автозаполнения.Так что я должен решить, что тип пользователя и сгенерировать источник в соответствии с этим.
Есть ли способ, которым я мог бы решить эту задачу?Пожалуйста, помогите.
Ниже приведен один из кодов, которые я недавно использовал, но безрезультатно, он не работает:
private void Form2_Load(object sender, EventArgs e)
{
string str = @"Data Source=MEDIXPC197;Initial Catalog=Inventory;Integrated Security=True";
SqlConnection con = new SqlConnection(str);
SqlDataAdapter da = new SqlDataAdapter("SELECT Product Code from tblmaster", con);
dt = new DataTable();
da.Fill(dt);
dataGridView1.DataSource = dt;
}
private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
string text = dataGridView1.Columns[4].HeaderText;
if (text.Equals("Product Code")) ;
{
TextBox auto_text = e.Control as TextBox;
if (auto_text != null)
{
auto_text.AutoCompleteMode = AutoCompleteMode.Suggest;
auto_text.AutoCompleteSource = AutoCompleteSource.CustomSource;
AutoCompleteStringCollection sc = new AutoCompleteStringCollection();
add_items(sc);
auto_text.AutoCompleteCustomSource = sc;
}
}
}
public void add_items(AutoCompleteStringCollection column)
{
column.Add("test1");
РЕДАКТИРОВАТЬ:
Я уже заставил его работать, используя другой код (см. Ниже), и теперь моя проблема заключается в том, что предложение показывает только, если введенная мной буква является первой буквой данных, отображаемых в базе данных, мне нужно что-то, чтонапример, когда я что-то набираю, я набрал 1, предложение покажет «1, typo1, tester1tester, 111»
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace WindowsFormsApp4
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
//Left = (MdiParent.ClientRectangle.Width - Width) / 2;
//Top = (MdiParent.ClientRectangle.Height - Height) / 2;
DataGridViewTextBoxColumn dgvslno = new DataGridViewTextBoxColumn();
dgvslno.HeaderText = "Item Code";
dgvslno.Width = 40;
dataGridView1.Columns.Add(dgvslno);
DataGridViewTextBoxColumn dgvpro = new DataGridViewTextBoxColumn();
dgvpro.HeaderText = "Product Name";
dgvpro.Width = 40;
dataGridView1.Columns.Add(dgvpro);
}
public AutoCompleteStringCollection AutoCompleteLoad()
{
SqlConnection conn = new SqlConnection(@"Data Source=MEDIXPC197;Initial Catalog=Inventory;Integrated Security=True");
SqlCommand cmd = new SqlCommand("Select ProductCode from tblmaster", conn);
conn.Open();
SqlDataReader dr = cmd.ExecuteReader();
AutoCompleteStringCollection mycoll = new AutoCompleteStringCollection();
while (dr.Read())
{
mycoll.Add(dr["ProductCode"].ToString());
}
return mycoll;
}
private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
int column = dataGridView1.CurrentCell.ColumnIndex;
string headerText = dataGridView1.Columns[column].HeaderText;
if (headerText.Equals("Item Code"))
{
TextBox tb = e.Control as TextBox;
if(tb != null)
{
tb.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
tb.AutoCompleteCustomSource = AutoCompleteLoad();
tb.AutoCompleteSource = AutoCompleteSource.CustomSource;
}
}
else
{
TextBox tb = e.Control as TextBox;
if (tb !=null)
{
tb.AutoCompleteMode = AutoCompleteMode.None;
}
}
}
}
}