# [Checkbox]二進位儲存/資料表單一欄位 實作 ###### tags: `工作筆記` > 節省資料庫欄位空間,即使增加新的checkbox維護也方便的方法 後端(C#) 取出checkbox Value的部分 ```C# public partial class devicecheckarray { public int checkvalue { get; set; } public string name { get; set; } // int, not null } // 把資料存進去的二進位拿出來 private List<devicecheckarray> DeviceCheckboxSet(int devicesn) { var array = new List<devicecheckarray>(); // 處理字串 var temp = Convert.ToString(devicesn, 2).PadLeft(5, '0').ToCharArray(); int[] Intsarrat = Array.ConvertAll(temp, c => (int)Char.GetNumericValue(c)); for (int x = 0; x < Intsarrat.Length; x++) { var item = new devicecheckarray(); item.checkvalue = Intsarrat[x]; switch (x) { case 0: item.name = "模組1"; break; case 1: item.name = "模組2"; break; case 2: item.name = "模組3"; break; case 3: item.name = "模組4"; break; case 4: item.name = "模組5"; break; } array.Add(item); } return array; } ``` 前端Angular 顯示checkbox 的部分 ```htmlembedded= <ng-container *ngFor="let x of devicestr"> <input type="checkbox" [disabled]="edit == 0" name="DeviceSet" [checked]="x.checkvalue" (change)="x.checkvalue = !x.checkvalue">&nbsp;&nbsp;{{x.name}} </ng-container> ``` ```javascript= export class devicecheckarray { checkvalue: number; name: string; } devicestr = new Array<devicecheckarray>(); ``` 前端Angular 儲存checkbox 的部分 ``` javascript // 因為前端儲存為true and false這裡要先把他轉成數字 SetCheckbox() { this.devicestr.forEach(x => { x.checkvalue = x.checkvalue ? 1: 0; }) } ``` 後端(C#) 儲存checkbox 的部分 ``` C# /// <summary> /// 設備模組二進位轉存 /// </summary> /// <param name="para"></param> /// <returns></returns> private int DeviceNumSet(List<devicecheckarray> devicestr) { var str = ""; devicestr.ForEach(x => { str = str + x.checkvalue + ""; }); return Convert.ToInt32(str, 2); } ```