首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >来自2个字段的AutoCompleteStringCollection

来自2个字段的AutoCompleteStringCollection
EN

Stack Overflow用户
提问于 2016-07-10 15:34:05
回答 2查看 589关注 0票数 0

能否从两个字段中获得autoCompleteStringCollection的值?我有一个包含字段代码和NameA的表,可以从这两个字段获得自动完成的建议吗?我在windows窗体中使用c#。

这是我的密码:

代码语言:javascript
运行
复制
internal static System.Windows.Forms.AutoCompleteStringCollection getAutoCompleteSiteNames(out System.Windows.Forms.AutoCompleteStringCollection namesCollection)
        {
            try
            {
                if (con.State == System.Data.ConnectionState.Closed)
                    con.Open();

                string query = @"Select distinct [NameA] from [tblItem]";
                SqlCeCommand com = new SqlCeCommand(query, con);
                namesCollection = new System.Windows.Forms.AutoCompleteStringCollection();
                SqlCeDataReader dr = com.ExecuteReader();

                while (dr.Read())
                    namesCollection.Add(dr["NameA"].ToString());
            }
            catch (Exception)
            {
                throw new Exception();
            }
            finally
            {
                con.Close();
            }
            return namesCollection;
        }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-10 15:56:42

我猜你的意思是

代码语言:javascript
运行
复制
string query = @"Select distinct [NameA] from [tblItem] union
                 Select distinct [Code]  from [tblItem] ";
票数 1
EN

Stack Overflow用户

发布于 2016-07-10 15:45:28

通过使用以下LINQ,可以获得两个文本框的自动完成字符串的唯一出现:

代码语言:javascript
运行
复制
var allStrings = textBox1.AutoCompleteCustomSource
    .Cast<string>()
    .Union(
        textBox2.AutoCompleteCustomSource
        .Cast<string>()
    ).ToList();

UPDATE:您完全更改了您的问题,使我以前的回答无效。

我将把任务分成两个不同的任务:

  1. 将表读入对象列表。
  2. 从对象列表中获取自动完成源。

如果有一个表示数据的类,那么处理数据就更容易了,而不是直接处理数据库。创建一个表示数据的类

代码语言:javascript
运行
复制
public class Item
{
    public int ID { get; set; }
    public string NameA { get; set; }
    public string Code { get; set; }
    // ... other properties go here
}

现在你可以读到这样的项目了

代码语言:javascript
运行
复制
public List<Item> GetAllItems()
{
    var items = new List<Item>();
    using (var con = new SqlCeConnection(connectionString))
    using (var cmd = new new SqlCeCommand("Select * from tblItem", con))
    {
        conn.Open();
        SqlCeDataReader dr = cmd.ExecuteReader();
        int idOrdinal = dr.GetOrdinal("ID");
        int nameAOrdinal = dr.GetOrdinal("NameA");
        int codeOrdinal = dr.GetOrdinal("Code");
        // other fields ...
        while (dr.Read()) {
            var item = new Item();
            item.ID = dr.GetInt32(idOrdinal);
            item.NameA = dr.GetString(nameAOrdinal);
            item.Code = dr.GetString(codeOrdinal);
           // other fields ...
            items.Add(item);
        }
    }
    return items;
}

如果您使用类似于O/R映射器的实体框架来实现此任务的自动化,则会更容易。

现在您有了返回项目的一般方法,您可以在各种情况下使用这些方法。获得这些自动完成字符串只是其中之一。

代码语言:javascript
运行
复制
 List<Item> items = GetAllItems();
 var autocompleteNames = items
     .Select(i => i.NameA)
     .Distinct()
     .ToArray();
 var autocompleteCodes = items
     .Select(i => i.Code)
     .Distinct()
     .ToArray();
 nameATextBox.AutoCompleteCustomSource.AddRange(autocompleteNames);
 codeTextBox.AutoCompleteCustomSource.AddRange(autocompleteCodes);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38293531

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档