我一直在使用 c#(.NET FRAMEWORK)在 Visual Studio 中撰寫一些小專案,并且在我的一些 Windows 表單中,我想在不同的 lisboxes 中顯示有關某些物件的資訊。
在我的程式中,我得到了一個名為的類Client,該類具有一些屬性:一個 int 呼叫DNI(這是標識客戶端的那個),一個 string 呼叫Name和一個 int 呼叫Telephone。我想要一個表單來顯示 3 個不同的串列框,每個串列框都有一組 Client 物件的元素串列。關鍵是 Client 物件的 Properties 顯示在每個 listBox 的相同索引中(也就是說,水平閱讀您會看到屬性的三個值)。我在每個按鈕的頂部實作了一個按鈕,按字母順序對串列框的元素進行排序,但我想在它們之間進行系結,所以當您按字母順序對一個串列框進行排序時,另外兩個對它們的元素進行排序以匹配新的元素順序在一個按字母順序排序的。
我被告知班級DataBindings可以用來做到這一點。我曾嘗試在互聯網上搜索它,但一無所獲,閱讀檔案也無濟于事,所以我最終將其發布在這里。我該如何使用DataBindings來解決這個問題?任何幫助或提示將不勝感激,在此先感謝。
uj5u.com熱心網友回復:
如果您已經為每個按鈕實作了一個按鈕,那么您就差不多完成了。
每個 ListBox 都必須系結一個客戶端串列,將特定屬性顯示為 DisplayMember。
每個 ListBox 的按鈕可以對 List 進行排序并重繪 所有 ListBox。如果您想了解更多資訊,請發布您的一些代碼。
uj5u.com熱心網友回復:
我必須寫什么來系結它們的索引?
我推薦了一個datagridview;您似乎有想要以表格方式顯示的表格資料。但是,我們將演示所有這些。
最簡單的路線:
- 新建一個winforms專案
- 添加一個 DataSet 型別的檔案,打開它,右鍵單擊設計圖面并選擇 Add .. DataTable
- 將表命名為 Client
- 右鍵單擊它并添加列,將其命名為 DNI,使用道具網格使其型別為 Int32
- 添加字串列名稱
- 添加一個 int 列電話
- 保存,切換到 Form1 設計器
- 打開資料源視窗(查看選單、其他視窗)
- 將 Client 節點拖到表單上。一個 datagridview 與托盤中的一些東西一起出現。移除導航器;在這種情況下它不是那么有用
- 向表單添加 3 個串列框
- 對于每個串列框:
- 使用 props 網格將其 DataSource 設定為 bindingsource
- 將 DisplayMember 設定為不同的列 - 一個 DNI、另一個 Name 和第三個 Telephone
現在就是這樣,運行應用程式。在 datagridview 中鍵入一些資料。請注意,當您通過單擊 DGV 標題進行排序時,串列框會緊隨其后;這是因為排序指令是由 bindingsource 執行的,并且所有控制元件都通過 bindingsource 進行系結:

所以這是通過系結源系結到強型別資料表的,這在概念上與你所擁有的并沒有什么不同。在設計圖面上制作表格及其列的作業在概念上等同于制作具有屬性的類。實際上,如果您要打開 DataSetBlahBlah.Designer.cs 檔案,您會發現一個class ClientRow具有 3 個屬性的DNI, Name, Telephone
你可以改變你所做的一切,例如 aList<Client>但是你的排序生活變得有點尷尬,因為 BindingSource 不知道如何對其進行排序。因此,您最終會得到以下結果:
//class property
private List<Client> Clients = new();
//in constructor
clientBindingSource.DataSource = Clients;
//in button that does sorting:
clientBindingSource.DataSource = Clients.OrderBy(c => c.name); //etc
就我個人而言,我會將其保留為強型別資料表;因為你想從List<Client>一個ClientDataTable集合中ClientRow得到足夠相似的表面..
Clients.Where(c => c.Name == "John"); //how you might search a List<client>
ClientsDT.Where(c => c.Name == "John"); //how you might search a ClientDataTable
Clients.Add(new Client(){ DNI = 1, Name = "a", Telephone = 1 } ); //add to a List<Client>
ClientsDT.AddClientsRow(1, "a", 1); //how you might add to a ClientDataTable
等等
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/419603.html
標籤:
上一篇:按順序獲取R中的目錄串列
