我有CheckboxList
个星期几。用户可以在这些日子里进行选择。我要做的是将所选日期插入数据库,表days
,其中包含每列中的星期几。因此,当用户选择星期六时,值1
将插入Saturday
,依此类推。 0
将是未选择的值的值。
我正在使用表适配器进行查询。除了对每个选项使用if语句之外,还有其他方法可以做到这一点吗?
答案 0 :(得分:0)
我不确定我是否得到了它,但是如果你在String.Format
和INSERT
中选择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
声明!