我在爲期一週的日子有CheckboxList
。用戶可以在這些日子中進行選擇。我所要做的是將選定日期插入數據庫中,表格days
包含每列中的星期幾。因此,當用戶選擇星期六時,值1
將被插入到Saturday
等等。 0
將是未選定值的值。插入的CheckBoxList值數據庫
我使用的查詢表適配器。無論如何總是要這樣做,除了每個選項使用if語句之外呢?
我在爲期一週的日子有CheckboxList
。用戶可以在這些日子中進行選擇。我所要做的是將選定日期插入數據庫中,表格days
包含每列中的星期幾。因此,當用戶選擇星期六時,值1
將被插入到Saturday
等等。 0
將是未選定值的值。插入的CheckBoxList值數據庫
我使用的查詢表適配器。無論如何總是要這樣做,除了每個選項使用if語句之外呢?
我的建議是不要overthink或過分使用。你可以做到這一點,而不需要你的表中的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
秒(使用整數值作爲列表項的值和枚舉的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
聲明!
感謝您的明確和很好的解釋。 – OJazem
你現在的代碼是什麼樣的?表格的模式是什麼?當用戶保存時,是否添加了單個行或每天添加了一行選項? –
你在使用Forms或ASP.NET嗎? –
我還沒有寫這個部分的代碼。用戶保存時會添加一行。我正在使用C#表單。 – OJazem