c# - 使用 SQL Server 数据库中的数据在文本框中自动完成

标签 c# sql-server autofill

我试图让我的文本框在用户输入文本框以编写查询时自动完成。这类似于 SQL Server Management Studio 的做法,并在您键入向下箭头或单击表名或列名时提供选项。这是我的以下代码。

public void loadData()
{
    var myConnection = new SqlConnection(DBConnectionBox.Text);
    myConnection.Open();

    AutoCompleteStringCollection namesCollection = new AutoCompleteStringCollection();
    string query = @"Select distinct [name] from [INFORMATION_SCHEMA.TABLES]";

    SqlCommand cmd = new SqlCommand(query, myConnection);

    SqlDataReader dr = cmd.ExecuteReader();

    if (dr.HasRows == true)
    {
        while (dr.Read())
            namesCollection.Add(dr["name"].ToString());
    }

    dr.Close();
    myConnection.Close();

    ManualQueryBox.AutoCompleteMode = AutoCompleteMode.Append;
    ManualQueryBox.AutoCompleteSource = AutoCompleteSource.CustomSource;
    ManualQueryBox.AutoCompleteCustomSource = namesCollection;
}

private void ManualQueryBox_KeyUp(object sender, KeyEventArgs e)
{
    loadData();
}

这是我用来抓取文本框中内容并执行它的代码。

private void ExecuteBtn_Click(object sender, EventArgs e)
{
    this.ClientInfoDGV.DataSource = null;
    this.ClientInfoDGV.Rows.Clear();

    var myConnection = new SqlConnection(DBConnectionBox.Text);

    var ManualCmd = new SqlCommand(ManualQueryBox.Text);
    ManualCmd.Connection = myConnection;
    ManualCmd.CommandType = CommandType.Text;

    SqlDataAdapter SqlAdap = new SqlDataAdapter(ManualCmd);
    DataTable MQRecord = new DataTable();
    SqlAdap.Fill(MQRecord);

    ClientInfoDGV.DataSource = MQRecord;
}

我以前从未做过自动填充,但环顾四周我看到了一些 asp.net AJAX 控制工具包,但我不完全确定这一切是如何工作的。欢迎任何帮助。

更新自动填充代码

public void loadData()
        {
            var myConnection = new SqlConnection(DBConnectionBox.Text);
            myConnection.Open();
            AutoCompleteStringCollection namesCollection = new AutoCompleteStringCollection();
            string query = @"Select distinct [Id] from [Clients]";
            SqlCommand cmd = new SqlCommand(query, myConnection);
            SqlDataReader dr = cmd.ExecuteReader();
            if (dr.HasRows == true)
            {
                while (dr.Read())
                    namesCollection.Add(dr["id"].ToString());

            }

            dr.Close();
            myConnection.Close();

            ManualQueryBox.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
            ManualQueryBox.AutoCompleteSource = AutoCompleteSource.CustomSource;
            ManualQueryBox.AutoCompleteCustomSource = namesCollection;
        }

最佳答案

尝试将自动完成模式更改为 suggestappend:

ManualQueryBox.AutoCompleteMode=AutoCompleteMode.SuggestAppend;

我认为您不需要每次在 key up 事件中加载数据,只要加载一次(可能在表单加载中)并指定文本框的来源即可。

这可能有帮助:https://msdn.microsoft.com/en-us/library/system.windows.forms.textbox.autocompletemode(v=vs.110).aspx

关于c# - 使用 SQL Server 数据库中的数据在文本框中自动完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35236497/

相关文章:

c# - 有没有办法听到 Reactive Extensions 中没有引发任何事件?

c# - WebApi 强制操作返回 xml

c# - Geo_Point 属性未按预期编制索引

sql-server - 获取多行的天数

javascript - 登录表单自动填充,在 iframe 中,在 android 浏览器中不起作用

c# - Linq:获取值存在于另一个表中的行

.net - 是否可以使用 SqlException.LineNumber 来识别异常是否与连接相关?

c# - Entity Framework 自定义迁移

javascript - 什么会导致 Chrome 保存密码失败?

pipe - 如何根据同一仪器中先前的复选框结果自动填充 REDCap 复选框