我有一個表單
裡面有四個checkbox
A選項 = 1
B選項 = 2
C選項 = 4
D選項 = 8
存入DB的欄位(status)會是int
在model中取資料的時候是string 如下
pbublic string Status {get;set}
我現在知道
‵‵‵
int a = Status; //勾選後的加總數字
for (var currentPow = 1; currentPow != 0; currentPow <<= 1)
{
if ((currentPow & a) != 0)
Console.WriteLine(currentPow);
}
‵‵‵
這一段可以取出總數是由哪幾個數字組成
第一頁是會顯示全部資料
我現在不知道怎麼在model把我呼叫的api資料也就是db原本是數字的那個欄位
顯示到畫面時會自動切成我要對應的ABCD
以及我進到第二頁時
也就是新增或修改時要怎麼把我所勾選的值再轉成整數存入DB
再麻煩各位大神了
一般來說,核取框的設計,的確是先如你那樣子。
做2的倍數存放 1 2 4 8 16 ....
儲存時,則是將有勾選的相加儲存那個數就好。
至於輸出判斷,則用位計算符號來幫你了。
={輸出值}&1 ? 'checked' : ''
以上就是代表你上面的組合值,是有包含到1的勾選。
一般沒包含到會輸出0。有包含到的,就我所了解
各程式語言的輸出好像不太一樣。有的是回傳 0跟1而已。有的是回傳 0跟比較值。
照這篇的寫法
1.資料庫到UI
int dbvalue = Int16.Parse(Status); //"5"->5
string ckvalue = Convert.ToString(dbvalue, 2); //5->"0101"
'分割字串並設定對應的 checkbox 值即可
2.UI到資料庫
'依 checkbox 的值組成 0011 的字串 ckvalue //"0011"
int dbvalue = Convert.ToInt32(ckvalue, 2) //"0011"->3
Status = dbvalue.toString() //將 "3" 寫回資料庫
.Net 有提供 Enum Flag 可以參考看看
enum 預設是 int,Status 的型別直接定義成 enum,送到DB就會是 INT 型別
using System;
public class Program
{
public static void Main()
{
TestEnum test = TestEnum.A選項 | TestEnum.B選項 | TestEnum.C選項;
Console.WriteLine("test = " + test);
Console.WriteLine("test = " + (int)test);
Console.WriteLine("test 是否包含A選項 = " + test.HasFlag(TestEnum.A選項));
Console.WriteLine("test 是否包含D選項 = " + test.HasFlag(TestEnum.D選項));
}
}
[Flags]
public enum TestEnum
{
A選項 = 1,
B選項 = 2,
C選項 = 4,
D選項 = 8
}
public class Model
{
public TestEnum Status { get; set; }
}