2013-06-24 2 views
0

내 웹 페이지에는 입력을 각각 연도와 월로 취하는 2 개의 텍스트 상자가 있습니다. 그런 다음이 값에 따라 데이터베이스 테이블에서 근무일이라고하는 열 값을 검색합니다. 이 값의 형식은 다음과 같습니다 (111110011111001111100111110011) 여기서 1은 작업 일을 의미하고 0은 휴일을 의미합니다 (앉거나 태양 또는 다른 휴일 일 수 있음). 이제이 검색된 값에 따라 30/31 (월 요일에 따라 다름) 확인란을 표시하고 공휴일 확인란을 선택하고 선택을 취소해야합니다. 이것은 다음과 같아야합니다 1 2 3 4 5 6 7 ............................... 30 및 아래의 확인란 그들. 이제 코드는 1 (첫 번째 헤더) 아래에 1 개의 체크 박스 만 표시하고 다음 날짜는 리피터에 표시되지만 체크 박스는 다음 줄에 표시됩니다. 문제를 말해 줄 수 있니?동적으로 확인란을 표시합니다.

코드 뒤에

공용 클래스 MyCheckBox { 공공 부울이의 IsChecked {얻을; 세트; } 은}

public void search(object sender, EventArgs e) 
    { 

     string cnnString = "Server=localhost;Port=3307;Database=leavesystem;Uid=root;Pwd=ashish"; 
     MySqlConnection cnx = new MySqlConnection(cnnString); 
     cnx.Open(); 
     string cmdText = "Select WorkingDays from calender where Year = '" + year.Value + "' and Month = '" + month.Value + "' "; 
     MySqlCommand cmd = new MySqlCommand(cmdText, cnx); 
     if (month.Value == " January || March || May || July || August || October || December ") 
     { 
      string str = Convert.ToString(cmd.ExecuteScalar()); 
      List<MyCheckBox> list = new List<MyCheckBox>(); 
      foreach (char c in str) 
       list.Add(new MyCheckBox { IsChecked = c == '0' }); 
      MyRepeater1.DataSource = list; 
      MyRepeater1.DataBind(); 
     } 
     else if (month.Value == " April || June || September || November ") 
     { 
      string str = Convert.ToString(cmd.ExecuteScalar()); 
      List<MyCheckBox> list = new List<MyCheckBox>(); 
      foreach (char c in str) 
       list.Add(new MyCheckBox { IsChecked = c == '0' }); 
      MyRepeater2.DataSource = list; 
      MyRepeater2.DataBind(); 
     } 
     else if (month.Value == " February ") 
     { 
      string str = Convert.ToString(cmd.ExecuteScalar()); 
      List<MyCheckBox> list = new List<MyCheckBox>(); 
      foreach (char c in str) 
       list.Add(new MyCheckBox { IsChecked = c == '0' }); 
      MyRepeater3.DataSource = list; 
      MyRepeater3.DataBind(); 
     } 

} 

중계기는 하나 개의 값을 필요로하기 때문에 현재 데이터 집합을 사용하지 않아야이

<asp:Repeater ID="MyRepeater" runat="server"> 
>      <HeaderTemplate> 
>        <table width="100%" class="table" border="1" style="font: 8pt verdana"> 
>        <tr> 
>          <% 
>           for (int i = 1; i <= 31; i++) 
>             { 
>               Response.Write("<td>" + i + "</td>"); 
>             }  
>          %> 
>        </tr> 
>    
>      </HeaderTemplate> 
>      <ItemTemplate> 
>        <tr> 
>         <td> 
>           <asp:CheckBox ID="CheckBox1" Checked='<%# Eval("IsChecked") %>' runat="server" /> 
>         </td> 
>        </tr> 
>        </table> 
>      </ItemTemplate> 
>  </asp:Repeater> 

<asp:Repeater ID="MyRepeater2" runat="server"> 
      <HeaderTemplate> 
       <table width="100%" class="table" border="1" style="font: 8pt verdana"> 
        <tr> 
         <% for (int i = 1; i <= 30; i++) 
          { 
           Response.Write("<td>" + i + "</td>"); 
          } %> 
        </tr> 
        <tr> 
      </HeaderTemplate> 
      <ItemTemplate> 
        <td> 
        <asp:CheckBox ID="CheckBox1" Checked='<%# Eval("IsChecked") %>' runat="server" /> 
        </td> 
      </ItemTemplate> 
      <FooterTemplate> 
        </tr> 
       </table> 
      </FooterTemplate> 
     </asp:Repeater> 

     <asp:Repeater ID="MyRepeater3" runat="server"> 
      <HeaderTemplate> 
       <table width="100%" class="table" border="1" style="font: 8pt verdana"> 
        <tr> 
         <% for (int i = 1; i <= 28; i++) 
          { 
           Response.Write("<td>" + i + "</td>"); 
          } %> 
        </tr> 
        <tr> 
      </HeaderTemplate> 
      <ItemTemplate> 
        <td> 
        <asp:CheckBox ID="CheckBox1" Checked='<%# Eval("IsChecked") %>' runat="server" /> 
        </td> 
      </ItemTemplate> 
      <FooterTemplate> 
        </tr> 
       </table> 
      </FooterTemplate> 
     </asp:Repeater> 
+0

내 대답이 정확하다는 것을 알았습니까? –

+0

헤이 맨 나는 그것을 시도했지만 단지 1 개의 체크 박스를 보여 주었다. ojlovecd에 의해 주어진 답은 모든 체크 박스를 보여줍니다. 날짜로 열 이름을 가진 열 멤버로 지정합니다. 1,2 ... 너무 .. 당신이 대답을 편집하고 이것으로 나를 도울 수 있습니까 !! –

답변

0

또 다른 답을 들려 드리겠습니다. 먼저 클래스를 정의합니다.이 클래스는 체크 상자가 치부되었는지 여부를 나타냅니다.

public class MyCheckBox 
{ 
    public bool IsChecked { get; set; } 
} 

그런 다음 목록을 채우는 :

<table> 
    <tr> 
     <% 
      for (int i = 1; i <= 31; i++) 
      { 
       Response.Write("<td>" + i + "</td>"); 
      }  
     %> 
    </tr> 
    <tr> 
     <asp:Repeater ID="MyRepeater" runat="server"> 
      <ItemTemplate> 
       <td> 
        <asp:CheckBox ID="CheckBox1" Checked='<%# Eval("IsChecked") %>' runat="server" /> 
       </td> 
      </ItemTemplate> 
     </asp:Repeater> 
    </tr> 
</table> 

는 희망이 도움이 :

string cnnString = "Server=localhost;Port=3307;Database=leavesystem;Uid=root;Pwd=ashish"; 

MySqlConnection cnx = new MySqlConnection(cnnString); 
cnx.Open(); 
string cmdText = "Select WorkingDays from calender where Year = '" + year.Value + "' and Month = '" + month.Value + "' "; 
MySqlCommand cmd = new MySqlCommand(cmdText, cnx); 

string str = Convert.ToString(cmd.ExecuteScalar()); 
List<MyCheckBox> list = new List<MyCheckBox>(); 
foreach (char c in str) 
    list.Add(new MyCheckBox { IsChecked = c == '1' }); 
MyRepeater.DataSource = list; 
MyRepeater.DataBind(); 

마지막으로, 중계기는 것 같습니다.

+0

@AshishBatra 안에 있습니다. 답변을 편집했습니다. 다시 시도하십시오. – ojlovecd

+1

<% for %> " "검사 = '<% # 평가 ("의 IsChecked ") %>'RUNAT ="서버 "/>
"+ i +"
ojlovecd

+0

헤이 맨은 붙어 있습니다. 또 다른 문제가 있습니다. 30 개의 체크 박스가 있고 그 중 8 개의 체크 박스가 체크되어 토요일과 일요일임을 확인하면 여기에 또 다른 공휴일을 추가하려면 Chechbox를 확인하고 업데이트 버튼을 눌러 쿼리가 패턴을 취해야합니다. 확인란을 선택하고 데이터베이스에서 업데이트하십시오. 패턴이 111110011111001111100111110011이라고 가정합니다. 이것은 30 일간의 한 달입니다. 이제 패턴이 110110011111001111100111110011이어야하므로 3 번째 위치에있는 상자를 확인합니다. 이것은 데이터베이스에서 업데이트되어야합니다. 이 일을 어떻게해야합니까? –

0

것 같습니다.

string cnnString = "Server=localhost;Port=3307;Database=leavesystem;Uid=root;Pwd=ashish"; 

MySqlConnection cnx = new MySqlConnection(cnnString); 
cnx.Open(); 
string cmdText = "Select WorkingDays from calender where Year = '" + year.Value + "' and Month = '" + month.Value + "' "; 
MySqlCommand cmd = new MySqlCommand(cmdText, cnx); 

char[] a = Convert.ToString(cmd.ExecuteScalar()).ToCharArray(); 
ListItem[] items = new ListItem[a.Length]; 
for (int i = 0; i < items.Length; i++) 
{ 
    items[i] = new ListItem(m.ToString()); 
    if (m == '0') 
     items[i].Selected = true; 
    else 
     items[i].Selected = false; 
    checks.Items.Add(items[i]); 
    i++; 
} 
cnx.Close(); 
+0

대답이 정확합니다. 체크 박스는 수직으로 표시됩니다. 그것들을 한 줄로 표시하는 방법? 나는 수평으로 의미한다! –

+0

@AshishBatra 각 체크 박스에 스타일을 추가 할 수 있습니다 : style = "float : left;" – ojlovecd

+0

안녕하세요, 저는 질문을 업데이트했습니다. 데이터를 원하는 방식으로 볼 수 있습니까? 여기에 제대로 표시되지 않습니다. 사실 리피터를 사용하고 열 이름은 날짜 이름이어야합니다. 1, 2에서 30까지, 그리고 각 열 이름 바로 아래에이 날짜가 휴일인지 여부를 나타내는 1 개의 확인란 만 표시됩니다. 그 형식으로 만들 수 있습니까? –