为了账号安全,请及时绑定邮箱和手机立即绑定

在 C# 中的 datagridview 中自动完成

在 C# 中的 datagridview 中自动完成

C#
天涯尽头无女友 2022-06-12 16:25:03
我一直在到处寻找我的问题的答案。但是我还没有找到满意的答案。现在这是我的问题。我在 C# 中有一个未绑定到任何数据源的 datagridview。我想让用户在其中一列中输入数据。我需要做的是通过自动完成来支持用户。自动完成的数据来自数据库。我可以很好地处理这个问题,但我的问题是建议应该取决于用户输入的字符。例如,如果用户输入“g”并且我的数据库查询返回“garlic”,则自动完成应该显示它。这对于普通的文本框来说很容易。但是 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 回答

?
catspeake

TA贡献1111条经验 获得超0个赞

我已经使用其他代码(见下文)使它工作,现在我的问题是,如果我输入的字母是数据库中显示的数据的第一个字母,我需要一些东西,当我输入一些东西时,我需要一些东西,比如我输入了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;

                }

            }

        }

    }

}



查看完整回答
反对 回复 2022-06-12
  • 1 回答
  • 0 关注
  • 179 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信