2014-01-24 30 views
0

我在爲期一週的日子有CheckboxList。用戶可以在這些日子中進行選擇。我所要做的是將選定日期插入數據庫中,表格days包含每列中的星期幾。因此,當用戶選擇星期六時,值1將被插入到Saturday等等。 0將是未選定值的值。插入的CheckBoxList值數據庫

我使用的查詢表適配器。無論如何總是要這樣做,除了每個選項使用if語句之外呢?

+0

你現在的代碼是什麼樣的?表格的模式是什麼?當用戶保存時,是否添加了單個行或每天添加了一行選項? –

+0

你在使用Forms或ASP.NET嗎? –

+0

我還沒有寫這個部分的代碼。用戶保存時會添加一行。我正在使用C#表單。 – OJazem

回答

0

我的建議是不要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聲明!

+0

感謝您的明確和很好的解釋。 – OJazem

0

我不太確定如果我知道了,但是如果您在String.FormatINSERT中選擇ID作爲變量(即星期日爲1,星期一爲2等),則該怎麼辦。

+0

我已經想到了這種方式,但是我遇到了如何讓它們在單個數據庫表中存在的問題。 – OJazem

+0

我不明白,發佈你的代碼/數據庫設計。 – Random