首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C# ComboBox 綁定 Access 表名顯示異常:LINQ 查詢與 DataSource 設置修正

     編輯:程式設計綜合問答

問題現象

從 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); // 邏輯顛倒

修正方案

  1. 使用強類型 LINQ:dt.AsEnumerable().Select(r => r.Field<string>("TABLE_NAME")).ToList()。
  2. ComboBox 自動顯示 DataSource 項目,無需手動設置 Text;若需顯示不同屬性,設置 DisplayMember。
  3. Access 系統表名以 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>() 獲取強類型數據,過濾系統表,直接綁定列表即可實現預期顯示與選中行為。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved