2010-07-28 59 views

回答

4

賈裏德是正確的 - 你不能沒有做一些操作直接綁定。下面是一個使用LINQ數據集擴展檢索字段作爲自動完成源的例子:

DataTable dtPosts = new DataTable(); 
using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["StackOverflow"].ConnectionString)) 
{ 
    conn.Open(); 
    using (SqlDataAdapter adapt = new SqlDataAdapter("SELECT TOP 100 Id, Title, Body, CreationDate FROM Posts WHERE Title IS NOT NULL ORDER BY Id", conn)) 
    { 
     adapt.SelectCommand.CommandTimeout = 120; 
     adapt.Fill(dtPosts); 
    } 
} 

//use LINQ method syntax to pull the Title field from a DT into a string array... 
string[] postSource = dtPosts 
        .AsEnumerable() 
        .Select<System.Data.DataRow, String>(x => x.Field<String>("Title")) 
        .ToArray(); 

var source = new AutoCompleteStringCollection(); 
source.AddRange(postSource); 
textBox1.AutoCompleteCustomSource = source; 
textBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend; 
textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource; 
+0

感謝您的回答...但它似乎很複雜,我理解你的代碼...我只是新的節目,我選擇學習C#語言。我還不知道使用LINQ。 – yonan2236 2010-07-28 02:37:08

+0

但我有你的想法.. – yonan2236 2010-07-28 02:37:58

+0

@DavidHoerster你怎麼知道哪一個是從字符串數組中選擇的? – Igor 2013-02-10 23:59:40

-1

是的。

下面是使用強類型DataSet和兩個文本框的例子(source ...滾過大圖像頂部去的代碼)未直接

For Each store As StoreDataSet.StoreRow In StoreDataSet.Store 
    If store.StoreID.StartsWith("0") Then 
     StoreIDTextBox.AutoCompleteCustomSource.Add(store.StoreID.TrimStart("0")) 
    End If 
    StoreIDTextBox.AutoCompleteCustomSource.Add(store.StoreID) 
    StoreNameTextBox.AutoCompleteCustomSource.Add(store.StoreName) 
Next store 
3

,你會想讀你的數據表變成了AutoCompleteStringCollection

你可以做這樣的事情(from here):

private AutoCompleteStringCollection GetAutoSourceCollectionFromTable(DataTable table) 
{ 
    AutoCompleteStringCollection autoSourceCollection = new AutoCompleteStringCollection(); 

    foreach (DataRow row in table.Rows) 
    { 
     autoSourceCollection.Add(row[0]); //assuming required data is in first column 
    } 

    return autoSourceCollection; 
} 
1

我想你已經知道你的答案,但有人誰到這個問題,答案是否定的,如果你是如有疑問,請參閱支持的選項AutoCompleteSource

當談到Winforms中的自動完成自定義數據時,我們使用AutoCompleteCustomSource選項,該選項只能獲取或設置AutoCompleteStringCollection。現在

,您可以用您想要的查詢和方法,從數據庫中獲取記錄填充的DataTable,然後你可以通過數據表DataRow元素遍歷這些記錄添加到StringCollection。這是一個被Leandro Tuttini做出一個簡單的例子:

textBox1.AutoCompleteCustomSource = LoadAutoComplete(); //this method is below 
textBox1.AutoCompleteMode = AutoCompleteMode.Suggest; 
textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource; 


public static AutoCompleteStringCollection LoadAutoComplete() 
{ 
    DataTable dt = LoadDataTable(); //suppose this method returns a DataTable with fetched records from database. 
    AutoCompleteStringCollection stringCol = new AutoCompleteStringCollection(); 
    foreach (DataRow row in dt.Rows) 
    { 
     stringCol.Add(Convert.ToString(row[0])); 
    } 
    return stringCol; //return the string collection with added records 
} 
相關問題