---
# System prepended metadata

title: ［Checkbox］二進位儲存/資料表單一欄位 實作
tags: [工作筆記]

---

# ［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);
}
        
```
