從 Access 獲取表名列表綁定到 ComboBox,選中項目不顯示在輸入框中。
DataTable dt = conn.GetSchema("Tables");
List tableNames = dt.Rows.OfType().Select(x => (string)x["Table_Name"]).ToList(); // 缺少泛型參數
comboBox2.DataSource = tableNames;
comboBox2.Text = Convert.ToString(this.comboBox2.SelectedValue); // 邏輯顛倒
dt.AsEnumerable().Select(r => r.Field<string>("TABLE_NAME")).ToList()。ComboBox 自動顯示 DataSource 項目,無需手動設置 Text;若需顯示不同屬性,設置 DisplayMember。MSys 開頭,通常需過濾:WHERE TABLE_TYPE='TABLE' AND NOT TABLE_NAME LIKE 'MSys%'。string connString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\DataAll\MEASUREMENT30.mdb";
using (OleDbConnection conn = new OleDbConnection(connString)) {
conn.Open();
DataTable dt = conn.GetSchema("Tables");
var tableNames = dt.AsEnumerable()
.Where(r => r.Field<string>("TABLE_TYPE") == "TABLE"
&& !r.Field<string>("TABLE_NAME").StartsWith("MSys"))
.Select(r => r.Field<string>("TABLE_NAME"))
.ToList();
comboBox2.DataSource = tableNames;
// comboBox2.DisplayMember = "TABLE_NAME"; // 若綁定對象列表需指定
}
正確使用 AsEnumerable() + Field<T>() 獲取強類型數據,過濾系統表,直接綁定列表即可實現預期顯示與選中行為。