将checkboxlist值插入数据库

时间:2014-01-24 20:59:21

标签: c# sql

我有CheckboxList个星期几。用户可以在这些日子里进行选择。我要做的是将所选日期插入数据库,表days,其中包含每列中的星期几。因此,当用户选择星期六时,值1将插入Saturday,依此类推。 0将是未选择的值的值。

我正在使用表适配器进行查询。除了对每个选项使用if语句之外,还有其他方法可以做到这一点吗?

2 个答案:

答案 0 :(得分:0)

我不确定我是否得到了它,但是如果你在String.FormatINSERT中选择ID他选择作为变量(即星期日是1,星期一是2,等等。

答案 1 :(得分:0)

我的建议是不要过度思考或过度。您可以完成此操作,而无需在表中为列选择7列;你只需要一个,我会告诉你如何。

使用包含一周中某几天的enum属性制作[Flags]

[Flags]
public enum DaysOfWeek
{
    None      = 0,
    Sunday    = 1,
    Monday    = 2 << 1,
    Tuesday   = 2 << 2,
    Wednesday = 2 << 3,
    Thursday  = 2 << 4,
    Friday    = 2 << 5,
    Saturday  = 2 << 6
}

值必须增加2的幂才能使位测试工作,我稍后会解释。

现在,将这些值绑定到您的CheckBoxList但是您认为合适(基本上您将使用Enum.GetValues迭代枚举值,并将它们添加为ListItem s(使用整数值)作为列表项值和显示文本的枚举ToString()表示。)

然后在用户检查他们的选择之后,您可以迭代检查的项目,将它们逻辑OR放在一起(C#中的|)。这将为日期选择建立一个独特的价值。例如,这是二进制数学:

  Monday     00000010 (2) 
| Wednesday  00001000 (8)
| Saturday   01000000 (32)
             ========
           = 01001010 (42)

所以你将42存储在你的行中,就是这样!您可以在代码中执行此操作:

DaysOfWeek selected = DaysOfWeek.None;
foreach (DaysOfWeek item in list.CheckedItems)
{
    selected = selected | item;
}

Console.WriteLine(selected.ToString()); // see what you've got checked

稍后,当您从表中读取值时,您可以通过测试位值来确定检查了哪些天:

DaysOfWeek valueFromTable = (DaysOfWeek)42; // look up 

看到枚举中标记的内容很简单:

bool isMondayChecked = (valueFromTable & DaysOfWeek.Monday) == DaysOfWeek.Monday;

或者如果您使用的是.NET 4 +:

bool isMondayChecked = valueFromTable.HasFlag(DaysOfWeek.Monday);

完成了。没有一个if声明!