日韩欧美人妻无码精品白浆,www.大香蕉久久网,狠狠的日狠狠的操,日本好好热在线观看

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

在winform中如何實(shí)現(xiàn)雙向數(shù)據(jù)綁定?

freeflydom
2025年3月19日 8:50 本文熱度 1027

什么是雙向數(shù)據(jù)綁定?

雙向數(shù)據(jù)綁定是一種允許我們創(chuàng)建持久連接的技術(shù),使模型數(shù)據(jù)和用戶界面(UI)之間的交互能夠自動(dòng)同步。這意味著當(dāng)模型數(shù)據(jù)發(fā)生變化時(shí),UI會(huì)自動(dòng)更新,反之亦然。這種雙向數(shù)據(jù)綁定極大地簡化了UI和模型數(shù)據(jù)之間的同步,使開發(fā)者可以更專注于業(yè)務(wù)邏輯,而不是手動(dòng)處理UI和數(shù)據(jù)的同步。

今天我想通過winform中DataGridView控件為例,介紹在winform中如何實(shí)現(xiàn)雙向數(shù)據(jù)綁定。

一般在winform中使用DataGridView控件時(shí),我們可能是這樣使用的:

創(chuàng)建數(shù)據(jù)源

以Person類為例:

  public class Person
  {
      public string? Name { get; set; }
      public string? Home { get; set; }
  }

創(chuàng)建Person對(duì)象列表:

  // 創(chuàng)建一個(gè)Person對(duì)象的列表
  List<Person> people = new List<Person>()
  {
      new Person {Name = "張三",Home = "武漢" },
      new Person {Name = "李四",Home = "南昌" },
      new Person {Name = "王五",Home = "福州" },
  };

綁定數(shù)據(jù)源:

dataGridView1.DataSource = people;

這個(gè)時(shí)候的效果如下所示:

當(dāng)我們進(jìn)行修改之后,如下所示:

現(xiàn)在打印people列表第一個(gè)和第二個(gè)person對(duì)象的Home屬性值看看:

  Debug.WriteLine(people[0].Home);
  Debug.WriteLine(people[1].Home);

結(jié)果如下圖所示:

說明在dataGridView1上修改數(shù)據(jù),people列表也被修改了。

現(xiàn)在反過來測(cè)試一下,修改people列表第一個(gè)和第二個(gè)person對(duì)象的Home屬性值:

 people[0].Home = "廈門";
 people[1].Home = "廈門";

會(huì)發(fā)現(xiàn)dataGridView1上的數(shù)據(jù)不會(huì)發(fā)生變化,需要我們點(diǎn)擊對(duì)應(yīng)的空格之后才會(huì)發(fā)生改變,如下所示:

如果我們這樣寫的話:

 people[0].Home = "廈門";
 people[1].Home = "廈門";
 dataGridView1.UpdateCellValue(1,1);
 dataGridView1.UpdateCellValue(1,2);

效果如下所示:

只改變了一個(gè)空格的值,另一個(gè)還是需要點(diǎn)擊一下,才更新。

在winform中實(shí)現(xiàn)雙向數(shù)據(jù)綁定示例

首先創(chuàng)建一個(gè)Student類,如下所示:

 public class Student : INotifyPropertyChanged
 {
    
     private string? _name;
     public string Name
     {
         get { return _name; }
         set
         {
             _name = value;
             // Call OnPropertyChanged whenever the property is updated
             OnPropertyChanged("Name");
         }
     }       
     private string? _home;
     public string Home
     {
         get { return _home; }
         set
         {
             _home = value;
             // Call OnPropertyChanged whenever the property is updated
             OnPropertyChanged("Home");
         }
     }
     // Declare the event
     public event PropertyChangedEventHandler? PropertyChanged;
     // Create the OnPropertyChanged method to raise the event
     protected void OnPropertyChanged(string name)
     {
         var handler = PropertyChanged;
         handler?.Invoke(this, new PropertyChangedEventArgs(name));
     }
 }

實(shí)現(xiàn)了INotifyPropertyChanged接口。

創(chuàng)建數(shù)據(jù)源:

 // 創(chuàng)建一個(gè)Student對(duì)象的列表
 BindingList<Student> students = new BindingList<Student>()
 {
         new Student { Name = "張三", Home = "武漢" },
         new Student { Name = "李四", Home = "南昌"  },
         new Student { Name = "王五", Home = "福州"  },
 };

注意這里使用的是BindingList<T>而不是List<T>

BindingList<T>List<T>的區(qū)別

BindingList 和 List 都是用于存儲(chǔ)對(duì)象的集合,但它們之間有一些關(guān)鍵的區(qū)別。

  1. 數(shù)據(jù)綁定支持:BindingList 是為數(shù)據(jù)綁定設(shè)計(jì)的,它實(shí)現(xiàn)了 IBindingList 接口。這意味著當(dāng) BindingList 中的數(shù)據(jù)發(fā)生更改時(shí)(例如,添加、刪除或修改項(xiàng)),它會(huì)自動(dòng)通知綁定到它的任何 UI 控件。這對(duì)于 Windows Forms 或 WPF 這樣的 UI 框架非常有用,因?yàn)樗鼈兛梢宰詣?dòng)更新以反映數(shù)據(jù)的更改。相比之下,List 不支持?jǐn)?shù)據(jù)綁定。
  2. 事件通知:BindingList 提供了一些額外的事件,如 ListChanged,這可以讓你知道列表何時(shí)被修改。List 沒有這樣的事件。
  3. 性能:由于 BindingList 提供了額外的功能,所以在某些情況下,它可能比 List 慢一些。如果你不需要數(shù)據(jù)綁定或更改通知,那么 List 可能會(huì)提供更好的性能。

綁定數(shù)據(jù)源:

   dataGridView1.DataSource = students;

更改數(shù)據(jù)源的值,查看UI是否會(huì)自動(dòng)改變:

 students[0].Home = "廈門";
 students[1].Home = "廈門";  

實(shí)現(xiàn)的效果如下所示:

發(fā)現(xiàn)當(dāng)數(shù)據(jù)的值發(fā)生改變時(shí),dataGridView1會(huì)自動(dòng)進(jìn)行更新。

編輯dataGridView1查看數(shù)據(jù)源是否會(huì)發(fā)生改變,編輯之后如下圖所示:

查看結(jié)果:

 Debug.WriteLine(students[0].Home);
 Debug.WriteLine(students[1].Home);

結(jié)果如下圖所示:

說明編輯dataGridView1產(chǎn)生的更改也會(huì)導(dǎo)致數(shù)據(jù)源的更改。

總結(jié)

以上就是在winform中實(shí)現(xiàn)雙向數(shù)據(jù)綁定的一次實(shí)踐,要點(diǎn)有兩個(gè),第一個(gè)是類實(shí)現(xiàn)INotifyPropertyChanged,第二個(gè)是用BindingList<T>代替List<T>,希望對(duì)你有所幫助。

轉(zhuǎn)自https://www.cnblogs.com/mingupupu/p/18080974


該文章在 2025/3/19 8:50:46 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲(chǔ)管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

www.无码一区二区| 久久一久久一久久一久久一| 欧美日韩3| 中文字幕+乱码+中文字幕明步| 亚洲精品乱码在| 曰本69视频| 美女插入性网站| 国产精品久久99亚洲| 插插综合 日本大片| 日本在线观看一区| 久久久a看| 国产精品二十四页| 91亚洲欧美日韩在线观看| 少妇自拍高潮网站| 欧州熟妇女| 久久伊人大香蕉视频在线观看| 国产美女精品视频免费的看冈| 成人黄色小说免费在线观看| 欧美熟妇70| 欧美一区二区三区五月天| upu一区二区vagaa亚洲| 九九精品一二三区| 国产99无码| 91人妻视频精品| 91成人精品午夜网站| xxx噢美潮喷直播| 揭西县| 欧美第一区二区三| 日本一区二区不卡电影在线观看观看| 日日日日日日日日日日日日射尹人网| 免费少妇人妻不卡| 精品一区大佬| 一道本久久| 二区超碰日韩| 五月天久久福利精品| 日韩国产AV一区二区| 日韩成精品成人影院| 嗯啊…嗯嗯…啊在线观看| 久久综合不卡DVD| 美国成人噜噜噜| 国产福利视频 97|