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

WinForms 數據綁定不顯示:DataTable 主鍵重複導致 BindingSource 異常

     編輯:程式設計綜合問答

問題現象

手動構建 DataTable 並設定 PrimaryKey 為 StuID,但插入兩筆 StuID="09001" 的資料,導致 BindingSource 無法正確定位,TextBox 不顯示數據。

原因分析

DataTable.PrimaryKey 要求唯一,重複插入相同主鍵值會拋出例外或導致索引器失效,BindingSource 內部依賴主鍵進行貨幣管理(Current/Position),主鍵衝突會使導航失效。

解決方案

  1. 修正測試數據:確保主鍵唯一(如將第二筆改為 09003)。
  2. 或移除主鍵限制(僅供測試):
    // dt.PrimaryKey = new DataColumn[] { dt.Columns[0] }; // 註釋掉

正確代碼範例

DataTable dt = new DataTable("T_Student");
dt.Columns.Add("StuID", typeof(string));
dt.Columns.Add("Name", typeof(string));
// ... 其他欄位
// dt.PrimaryKey = new DataColumn[] { dt.Columns[0] }; // 若測試數據不唯一,請移除
dt.Rows.Add("09001", "王小玲", "女", 18, "軟件091");
dt.Rows.Add("09002", "張偉", "男", 20, "軟件092");
dt.Rows.Add("09003", "謝明明", "男", 19, "軟件091"); // 修正主鍵

BindingSource bs = new BindingSource();
bs.DataSource = dt;
txtNo.DataBindings.Add("Text", bs, "StuID");
// ... 其他綁定

延伸提示

  • 實際開發中,主鍵應來自資料庫(自增 ID 或業務唯一鍵),避免手動維護衝突。
  • BindingSource 支援排序、篩選、編輯狀態管理,善用 Filter/Sort 屬性可減少 SQL 查詢。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved