제 제안은이를 과소 평가하거나 과장하지 않는 것입니다. 개별 선택을 위해 테이블에 7 개의 열이 필요없이이 작업을 수행 할 수 있습니다. 너는 단 하나만 있으면 돼, 너에게 보여 줄게. 비트 테스트가 작동하려면
[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의 거듭 제곱으로 증가합니다
는 요일을 포함 [Flags]
속성을 가진 enum
확인 . 이제
, 당신이 적합 (기본적으로 당신이
Enum.GetValues
으로 열거 값을 반복 것입니다 및 정수 목록 항목 값으로 값과 열거의
ToString()
표현을 사용합니다 (
ListItem
들로 추가 참조 그러나 당신의
CheckBoxList
에이 값을 바인딩
사용자가 선택한 항목을 확인한 후에 논리 항목 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
무엇 4+
bool isMondayChecked = (valueFromTable & DaysOfWeek.Monday) == DaysOfWeek.Monday;
또는 당신은 .NET을 사용하는 경우 : 열거에 신고 된 것은 쉽다
bool isMondayChecked = valueFromTable.HasFlag(DaysOfWeek.Monday);
그리고 끝났습니다. 단일 if
성명이 아닙니다!
코드가 지금 어떤 모습입니까? 테이블의 스키마는 무엇입니까? 사용자가 저장하면 하나의 행이 추가되거나 하루에 하나의 행이 추가됩니까? –
Forms 또는 ASP.NET으로 작업하고 있습니까? –
아직이 부분에 대한 코드를 작성하지 않았습니다. 사용자가 저장하면 단일 행이 추가됩니다. 그리고 C# 형식으로 작업하고 있습니다. – OJazem