我有一个数据库表,其中包含一个字段名称省位,它加起来了模式的计数,例如:
AB-1
BC-2
CD-4
DE-8
EF-16.... and so on.
现在在表条目中我有一个值 13(省位),这意味着应该检查针对条目 AB、CD、DE(加起来为 13)的复选框。
我无法获得相同背后的逻辑,如何仅检查总和与表中条目相加的那些复选框?
您需要检查该值是否在按位总计中。
if( interestedInValue & totalValue == interestedInValue)
{
// this value is in the total, check the box
}
和http://msdn.microsoft.com/en-us/library/sbf85k1c(v=vs.71).aspx上的文档
例如 13 = 1 + 4 + 8
13 & 1 == 1 // true
13 & 2 == 2 // false
13 & 4 == 4 // true
13 & 8 == 8 // true
13 & 16 == 16 // 错误的
编辑:更多说明
ab.Checked = 1 && ProvinceBit == 1 // checkbox AB
bc.Checked = 2 && ProvinceBit == 2 // checkbox BC
...
该字段正在使用位标志。
13 是 1101 二进制。
因此,将值转换为位并为每个复选框分配一位。
通过将您的数字转换为字符串,您可以转换为数组或仅遍历字符串。有点蛮力,但会给你你需要的。
var value = 13
string binary = Convert.ToString(value, 2);
//binary = "1101"