2011-08-05 8 views
1

私はCityCode、Name、Countryの3つのカラムを持つ1つのテーブルを持つMicrosoft Accessデータベースを使用する.Net 4 Windows Formsアプリケーションを持っています。TextBox MDBのオートコンプリート

私がしたいのは、 "名前"と "国"を表示するオートコンプリートですが、選択すると "CityCode"の値がテキストボックスに表示されます。さらに、ユーザが都市コードLをタイプするときにLAXと入力すると、コードまたは名前がLで始まるすべての都市がリストされます。

これは実行できますか?

現在、私は、アクセスするデータベースのために、以下の持っている(しかし、少し遅いのようです!)

textBoxCity.AutoCompleteCustomSource = CityList(); 

public static AutoCompleteStringCollection CityList() 
    { 
     string connectionStringLD = string.Empty; 

      connectionStringLD = @"Driver={Microsoft Access Driver (*.mdb)};DBQ=c:\CityList.mdb"; 


     string SQL = "SELECT CityCode from CityTable"; 

     OdbcConnection conn = new OdbcConnection(connectionStringLD); 

     OdbcCommand cmd = new OdbcCommand(SQL); 
     cmd.Connection = conn; 

     conn.Open(); 

     OdbcDataReader reader = cmd.ExecuteReader(); 
     AutoCompleteStringCollection theCityList = new AutoCompleteStringCollection(); 

     while (reader.Read()) 
     { 

      theCityList.Add(reader.GetValue(0).ToString()); 

     } 

     return theCityList; 
    } 

答えて

0

この例を参照してくださいすることができます

私はあなたが私が何をしたいのか

とで取得していることは、「名前」と「国を示してオートコンプリートを持っているかわかりません選択された場合、 "CityCode"の値がテキストボックスに表示されます。

私はあなたの質問のオートコンプリート部分に答えることができます。

これを行うには、データをDataTableに取得する必要があります。データベースからテーブルに読み込むことはできますが、適切な方法はOleDbConnection、OleDbDataAdapter、およびOleDbCommandBuilderを使用することです。msdnには例があります。

今ではDataTableのですが、コンボボックスにバインドしていること:

var query = 
    from row in mytable.AsEnumerable() 
    select new { citycode = row.Field<string>("CityCode") } // put whatever you want in the anonymous type 

mycombobox.DisplayMember = "citycode" 
mycombobox.ValueMember = "citycode" // this one can be a different member name 
mycombobox.DataSource = query.toList(); // the datasource should be set last 

そして今、あなたはオートコンプリートするコンボボックスの動作を設定することができます。

  • combobox1.AutoCompleteModeを設定することができます
  • combobox1.AutoCompleteSourceをListItemsに設定して、データバインディングからオートコンプリートエントリを取得するように設定します(自動補充のみ)。

ユーザーが任意のデータ型を入力できるようにし、データテーブル値のみをオプションとして示唆したい場合は、AutoCompleteCustomSourceを設定し、DataSourceでの実際のデータバインディングについて心配する必要はありません。

これは一種の問題です。都市がまもなく国際空港を何度も開いているわけではないので、すべての空港コードをリストにダンプして、データをバインドすることもできます。

関連する問題