iT邦幫忙

0

如何將畫面上可複選checkbox 轉成二的倍數存入DBint

不明 2022-11-10 21:35:46828 瀏覽
  • 分享至 

  • xImage

我有一個表單
裡面有四個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

再麻煩各位大神了

ilwu iT邦新手 5 級 ‧ 2022-11-11 08:52:36 檢舉
應該是轉二進制
0001 = A
0011 = A+B
0111 = A+B+C
1111 = A+B+C+D
0101 = A+C

不過我好奇, 都已經是用 asp.net 了 代表也不是在韌體上直接操作
有必要為了省儲存空間...用這麼難以理解的作法嗎...
搞死自己而已 XD
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0

一般來說,核取框的設計,的確是先如你那樣子。
做2的倍數存放 1 2 4 8 16 ....

儲存時,則是將有勾選的相加儲存那個數就好。
至於輸出判斷,則用位計算符號來幫你了。

={輸出值}&1 ? 'checked' : ''

以上就是代表你上面的組合值,是有包含到1的勾選。
一般沒包含到會輸出0。有包含到的,就我所了解
各程式語言的輸出好像不太一樣。有的是回傳 0跟1而已。有的是回傳 0跟比較值。

0
海綿寶寶
iT邦大神 1 級 ‧ 2022-11-11 09:31:21

這篇的寫法
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" 寫回資料庫
0
w4560000
iT邦研究生 5 級 ‧ 2022-11-11 09:51:38

.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; }
}

我要發表回答

立即登入回答