2014-01-24 2 views
0

요일이있는 CheckboxList입니다. 사용자는 요즘을 선택할 수 있습니다. 내가 뭘하려고 데이터베이스에 선택된 일을 삽입, 각 열의 요일을 포함 days 테이블입니다. 따라서 사용자가 토요일을 선택하면 Saturday에 값 1이 삽입됩니다. 0은 선택되지 않은 값의 값입니다.데이터베이스에 체크 박스 목록 값을 삽입하십시오.

쿼리에 테이블 어댑터를 사용하고 있습니다. 어쨌든 각 옵션에 대해 if 문을 사용하는 것 외에는이를 수행 할 수 있습니까?

+0

코드가 지금 어떤 모습입니까? 테이블의 스키마는 무엇입니까? 사용자가 저장하면 하나의 행이 추가되거나 하루에 하나의 행이 추가됩니까? –

+0

Forms 또는 ASP.NET으로 작업하고 있습니까? –

+0

아직이 부분에 대한 코드를 작성하지 않았습니다. 사용자가 저장하면 단일 행이 추가됩니다. 그리고 C# 형식으로 작업하고 있습니다. – OJazem

답변

0

제 제안은이를 과소 평가하거나 과장하지 않는 것입니다. 개별 선택을 위해 테이블에 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 성명이 아닙니다!

+0

명확하고 훌륭한 설명에 감사드립니다. – OJazem

0

내가 알 수 있을지 모르겠지만 String.Format 및 (예 : 일요일은 1, 월요일은 2 등)으로 검색어를 작성하면 어떨까요?

+0

나는이 방법에 대해 생각해 왔지만, 문제를 해결하기 위해 데이터베이스 테이블을 단일 행에 저장하는 방법에 대해 고민했다. – OJazem

+0

코드/데이터베이스 디자인을 게시 할 수 없습니다. – Random

관련 문제