能否从两个字段中获得autoCompleteStringCollection的值?我有一个包含字段代码和NameA的表,可以从这两个字段获得自动完成的建议吗?我在windows窗体中使用c#。
这是我的密码:
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;
}发布于 2016-07-10 15:56:42
我猜你的意思是
string query = @"Select distinct [NameA] from [tblItem] union
Select distinct [Code] from [tblItem] ";发布于 2016-07-10 15:45:28
通过使用以下LINQ,可以获得两个文本框的自动完成字符串的唯一出现:
var allStrings = textBox1.AutoCompleteCustomSource
.Cast<string>()
.Union(
textBox2.AutoCompleteCustomSource
.Cast<string>()
).ToList();UPDATE:您完全更改了您的问题,使我以前的回答无效。
我将把任务分成两个不同的任务:
如果有一个表示数据的类,那么处理数据就更容易了,而不是直接处理数据库。创建一个表示数据的类
public class Item
{
public int ID { get; set; }
public string NameA { get; set; }
public string Code { get; set; }
// ... other properties go here
}现在你可以读到这样的项目了
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映射器的实体框架来实现此任务的自动化,则会更容易。
现在您有了返回项目的一般方法,您可以在各种情况下使用这些方法。获得这些自动完成字符串只是其中之一。
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);https://stackoverflow.com/questions/38293531
复制相似问题