0

私の Web ページには、入力をそれぞれ年と月として受け取る 2 つのテキスト ボックスがあります。次に、これらの値に応じてデータベース テーブルから、稼働日と呼ばれる列の値が取得されます。その値は次の形式です (111110011111001111100111110011) ここで、1 は営業日を意味し、0 は休日 (土、日、またはその他の休日) を意味します。この取得した値に応じて、30/31 (月の日付に応じて) のチェック ボックスを表示し、休日のチェック ボックスをオンにしてオフのままにする必要があります。1 2 3 4 5 6 7....................................30 のようになり、その下にチェックボックスが表示されます。現在、使用しているコードは 1 の下に 1 つのチェックボックス (最初のヘッダー) のみを表示し、次の日付はリピーターに表示されますが、チェックボックスは次の行に表示されます。問題を教えてもらえますか?

コードビハインド

public class MyCheckBox { public bool IsChecked { get; 設定; } }

    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>
4

2 に答える 2

0

必要な値は 1 つだけなので、ここでは DataSet を使用しないでください。

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();
于 2013-06-24T09:19:26.447 に答える
0

別の回答をさせてください。最初に、チェックボックスがチェックされているかどうかを表すクラスを定義します。

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

次に、リストに入力します。

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();

最後に、リピーターは次のようになります。

<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>

それが役に立てば幸い。

于 2013-06-24T13:01:29.490 に答える