Re: [問題] 大量變數對應至大量Control

看板C_Sharp (C#)作者 (笨嘎嘎)時間11年前 (2014/05/15 20:21), 11年前編輯推噓4(4015)
留言19則, 3人參與, 最新討論串4/4 (看更多)
※ 引述《james732 (好人超)》之銘言: : 首先要謝謝您的回覆,我想是我沒有說清楚...orz : 我的UI實際上是這個樣子的: http://imgur.com/5hNCp1L.png
: (工作上的東西,請恕我塗黑) : Raw Data 是從 Binary File 裡面讀出來的一大串 byte array : 每個Control的資料,有可能是這些來源之一: : (1) Raw Data 的某個 byte,顯示在 TextBox 上 => 10進位或16進位顯示 : (2) Raw Data 的某個 byte 的某一個 bit => 做為 CheckBox 是否勾選 : (3) Raw Data 的某個 byte 裡的某一些 bit => 做為 ComboBox 的 Index 選項 : (4) Raw Data 裡的多個 byte 組合成一個16位元或32位元的無號數 => TextBox 顯示 : 這樣的資料有好幾個Page,所以項目相當的多,而且沒有規則 : 我想問的是,Raw Data與Control之間要怎麼互動是最好的 : RawData讀出來可以正確的顯示在Control上 : Control上的改變也可以回寫至Raw Data 本來想推文,後來發現會寫很多就算了。 簡單一句話:取聯集。 或者詳細點的, 依照你的意思,我理解成這樣, 1. 一個RawData就是一筆資料 2. 一個RawData的不同Byte用不同的Control去顯示 3. 一個RawData的多個Byte可以組合成一個資訊,讓Control去顯示 如果換成程式碼的話,我的理解是這樣, 1. 一個RawData就是一個物件 2. 每個不同的Byte當成是一個基本屬性(最高溫度、最低溫度) 3. 多個基本屬性可以運算成另一個屬性(如:平均溫度=(最高溫度+最低溫度)/2) 4. 每個屬性都有一個Control去顯示 我的作法是, 一個RawData所有需要的顯示的屬性都算出來, 再來看你想怎樣的顯示方式。 1. 把所有要顯示的control都集合成一個,然後全部用DataGridView都顯示。 不管你是最高溫度、最低溫度、濕氣、紫外線、平均溫度… 不管其他資訊要不要,我一次都處理好全部顯示給你。 2. 如果顯示樣板數量有確認,如固定10個樣板 根據不同樣板給予不同資料。 如:你有溫度顯示樣板,紫外線顯示樣板,你點選什麼樣版我就給你怎樣資訊。 不管怎麼做,你一個RawData所需要的資訊一定要全部算出來。 資料與顯示頁面的連動部分, 可以利用控制項的Eevent、INotifyPropertyChanged、Binding, 方法很多選個你喜歡的。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 125.231.94.198 ※ 文章網址: http://www.ptt.cc/bbs/C_Sharp/M.1400156462.A.EBC.html

05/15 20:33, , 1F
謝謝您的回覆,我再想想看要怎麼做比較好
05/15 20:33, 1F

05/15 20:55, , 2F
其實我的問題主要是在資料量很大的情況下,怎麼做比較好
05/15 20:55, 2F

05/15 20:55, , 3F
目前大量的Property以及大量的Control Binding
05/15 20:55, 3F

05/15 20:55, , 4F
我自己都覺得弄錯了很難找問題....
05/15 20:55, 4F
所以我就建議你,全部都用GridView解決就好,也只要Binding一個而已, 而且你那些Property也不算多, 我還寫過一個class有60個property,也是用一個GridView解決, (不是我故意寫6X個,是對方給我的資料格式就長這樣。) 一推人都在建議你用GridView,怎麼感覺你都沒聽到~"~

05/15 22:27, , 5F
資料多的control binding用grid最好
05/15 22:27, 5F

05/15 22:28, , 6F
主要就是找出部分規則配例外處理
05/15 22:28, 6F

05/15 22:45, , 7F
看了一下 主要問題出在J大針對每一個檔案都new了一個
05/15 22:45, 7F

05/15 22:45, , 8F
class form出來對應 實際上應該要用grid view中的row就好
05/15 22:45, 8F

05/15 22:49, , 9F
gridview中的每一個row 都可以放你想要放的所有子控制項
05/15 22:49, 9F
※ 編輯: StupidGaGa (125.231.94.198), 05/16/2014 00:16:31

05/16 06:55, , 10F
以我目前的ui配置,我不知道要怎麼改用datagridview...
05/16 06:55, 10F
=====關於DataGridView===== 請問你是, 不會用DataGridView,還是不知道怎麼改成DataGridView? 如果你不會用DataGridView, 那你可以上MSDN或買書自學; 如果你不知道怎麼改成DataGridView, 那代表你有更多的細節沒說出來,而這些細節是必須要考量的, 或者更嚴重的,你的程式架構可能有問題,必須要修改。 該怎麼改成DataGirdView我已經附圖片給你了, 雖然只有一個欄位是CheckBox,但也代表其他欄位可以改成ComboBox或其他類型。 =====關於屬性===== 你的資料1~資料7,裡面的控制項都集合在一個DataGridView不困難, 比較麻煩(但不困難),像你程式裡面的struct Setting的屬性要一個一個設定, 你的RawData有上千個,但你的屬性並沒有上千個, 比較一下也知道該怎麼處理。 如果你嫌懶,那我跟你講,沒辦法,除非你不做Programer, 我也曾經光建立一個class就花了一整天,屬性也修了好幾次。 =====關於程式碼===== 依照你提供的範例,我建議你幾點, 1. 你少一個最基本的屬性,一個RawData本身 2. 你的屬性必須由RawData去算出來,不是每一個屬性都自己「設定」出來 3. 你的struct Setting內並沒有方法去算出屬性值。 我還是哪句話,你要有一個類別包含全部你所要顯示的屬性, 根據不同的Form去丟物件全部屬性,還是物件的部分屬性。 都提示成這樣,如果你還不懂,我…就只差幫你寫程式而已了~"~ ※ 編輯: StupidGaGa (60.249.117.38), 05/16/2014 09:29:29

05/16 15:54, , 11F
我目前只會用基本的datagridview,把List做為datasource
05/16 15:54, 11F

05/16 15:54, , 12F
顯示出來
05/16 15:54, 12F

05/16 15:55, , 13F
謝謝您的費心說明,我會再多用功的XD
05/16 15:55, 13F

05/16 18:30, , 14F
把gridview從工具箱拉出來後 切到原碼畫面去看
05/16 18:30, 14F

05/16 18:31, , 15F
(也就是切過去後 視窗會警告你不要亂改的那頁)
05/16 18:31, 15F

05/16 18:32, , 16F
把你放到class form裡面那些checkbox、combobox控制項
05/16 18:32, 16F

05/16 18:33, , 17F
塞到gridview裡面去 讓gridview去幫你代勞展這數千個form
05/16 18:33, 17F

05/16 18:33, , 18F
當然gridview會幫你展成一列一列的row 而不是form
05/16 18:33, 18F

05/16 21:46, , 19F
好的,我再仔細看看那邊自動產生的code
05/16 21:46, 19F
文章代碼(AID): #1JTB4kwy (C_Sharp)
文章代碼(AID): #1JTB4kwy (C_Sharp)