如果我有一个检查了所有值之和的数字,如何知道选中了哪个复选框?

时间:2015-05-07 13:41:06

标签: c# checkbox sum

我有一个现有的数据库,我的表中有一个字段,其中存储了一个值,所有"值的总和"我的复选框列表。

另一位程序员制作了这种方法,称之为"逻辑和"。我不知道这个方法,但现在我需要知道反向方法,所以我可以通过使用所有值的Sum值来知道选择了哪些复选框。

我真的不知道如何做到这一点......我正在使用C#和asp.net,但所有语言的逻辑都应该相同。

你能帮助我吗?

3 个答案:

答案 0 :(得分:4)

通常情况下,这些事情的权力为2 ......第一个复选框的“权重”为1,第二个复选框的“权重”为2,第三个复选框的权重为4,依此类推。

您可以通过执行

检查是否选中了复选框
if ((sum & 1) != 0) // first is checked
if ((sum & 2) != 0) // second is checked
if ((sum & 4) != 0) // third is checked

bool firstIsChecked = (sum & 1) != 0;
bool secondIsChecked = (sum & 2) != 0;
bool thirdIsChecked = (sum & 4) != 0;

等等。

如果你不喜欢二进制数学,你可以通过enum来利用Enum.HasFlag方法:

[Flags]
public enum MyChechboxes
{
    FooCheckbox = 1,
    BarCheckbox = 2,
    BazCheckbox = 4,
}

int sum = 5;

MyChechboxes checkeds = (MyChechboxes)sum;

bool firstIsChecked = checkeds.HasFlag(MyChechboxes.FooCheckbox);
bool secondIsChecked = checkeds.HasFlag(MyChechboxes.BarCheckbox);
bool thirdIsChecked = checkeds.HasFlag(MyChechboxes.BazCheckbox); 

答案 1 :(得分:2)

假设您有一家公司有5个功能(A,B,C,D,E)

<强>保存..

如果(A.isChecked)

  features = features | 1;

如果(B.isChecked)

  features = features | 2;

如果(C.isChecked)

  features = features | 4;

如果(D.isChecked)

  features = features | 8;

如果(E.isChecked)

  features = features | 16;

在您的数据库中存储功能值。

<强>中..

从db中获取价值

如果(特征&安培; 1)

A is checked

如果(特征和2)

B is checked

如果(特征和4)

C is checked

如果(特征和8)

D is checked

如果(特征&安培; 16)

E is checked

答案 2 :(得分:0)

您知道如何使用flags吗? 要使这种逻辑和方法可逆,它必须使用与标志枚举相同的原则:每个可能的复选框组合必须产生一个唯一的数字。

我猜测没有那么多复选框,编号如下: 1,2,4,8,16,32 ...等。这样任何组合都会产生一个数字,逻辑和将是可逆的。