分层架构中的自动完成文本框

Autocomplete textbox in layered architecture

我想用我的数据库创建自动完成textbox

我在分层架构(模型、DAL、BLL、演示)中编写我的应用程序。

我已经用 arraylist 创建了一个方法,它读取 returns 我在数据库中的 select 命令,它正在填充(我已经在 combobox).

但是当我尝试插入 textbox 时,没有任何反应...它没有显示建议。

我在论坛上找了一些东西,但我只找到了一层的例子,因为我是分层开发的,所以我不能在我的 DAL 中增加 属性 AutoCompleteStringCollection由我的 select 命令填充。

如果有人知道如何解决这个问题,请向我解释!

其他信息:我正在使用 winForm 和 C# 以及 SQL 服务器。

我想你想说的是 "But when i try to insert in the textbox, nothing happens... it doesn't show the sugestion." 好吧,我不能只在这里对所有层进行编码,但可以建议在您的 DAL 中创建一个 returns List 的方法,然后在您的表单页面上提供这样的代码

 txtName.AutoCompleteMode = AutoCompleteMode.Suggest;
 txtName.AutoCompleteSource = AutoCompleteSource.CustomSource;
 var autoCompleteCollection = new AutoCompleteStringCollection();
 autoCompleteCollection.AddRange(DAL.GetMethod().ToArray());
 textbox.AutoCompleteCustomSource = autoCompleteCollection;

感谢帮助!! 我使用了您的建议并做了一些小改动,对我来说效果很好...

原来唯一的问题是我的方法列表,一旦我改变它做一个 List < String > 事情就变得更好了。 对于那些想知道的人,我是这样做的:

DAL 层:

public List<string> LoadList()
{
List<string> tagsList = new List<string>();

using (SqlConnection connection = new SqlConnection(ADados.StringDeConexao))
{
connection.Open();
using (SqlCommand command = connection.CreateCommand())
{
command.CommandText = "SELECT column FROM table";

using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
if (!reader.IsDBNull(0))
tagsList.Add(reader.GetString(0));
}
reader.Close();
}
connection.Close();
return tagsList;
}

表示层(事件文本已更改):

PedidoBLL pedido = new PedidoBLL();

txtName.AutoCompleteMode = AutoCompleteMode.Suggest;
txtName.AutoCompleteSource = AutoCompleteSource.CustomSource;
AutoCompleteStringCollection popula = new AutoCompleteStringCollection();
popula.AddRange(pedido.LoadList().ToArray());
txtName.AutoCompleteCustomSource = popula;

在 BLL 层中,我只是调用 return DAL 方法 LoadList...