将标签转换为复选框列表

时间:2015-11-12 20:49:39

标签: c# sql asp.net label checkboxlist

注意:我是asp和sql的新手。试图修复一些不属于我的旧代码。

我有一个页面,其中包含一个带有一些数据库用户名的DropDownList。单击其中一个用户名后,将根据用户从数据库中提取的日期DropDownList上方显示一个列表。现在,日期的“列表”是一个标签,正在更改该标签的.text。我想改为将每个日期与一个复选框相关联,然后我可以根据它是否被选中来操作。

.aspx页面:

<anthem:Label ID="OpenTime" runat="server" />

.cs页面:

        SqlCommand command = new SqlCommand();
        command.Connection = gConn;

        if (Roles.IsUserInRole("Approver") == true)
        {
            DropDownList ddlActingAs = (DropDownList)LoginView1.FindControl("ddlActingAs");
            OpenTime.Text = "";
            String sql = "SELECT StartDate FROM Periods WHERE User_ID = @userid AND (PeriodStatus_ID = 1 OR PeriodStatus_ID = 2) ORDER BY StartDate DESC";
            command.CommandText = sql;
            command.Parameters.Add(new SqlParameter("userid", ddlActingAs.SelectedValue.ToString()));
            SqlDataReader reader = command.ExecuteReader();
            while (reader.Read())
                OpenTime.Text += "<br>" + reader.GetDateTime(0).ToString("MM/dd/yyyy") + " is open";
            OpenTime.UpdateAfterCallBack = true;
            reader.Close();
        }

示例:

enter image description here

对于初学者,我用一个像这样的复选框列表替换了标签:

<anthem:CheckBoxList ID="CheckTest" runat="server" />

然后我基本上尝试用“CheckTest”替换所有“OpenTime”。我搞乱了一个复选框列表的.DataSource和.Databind方法,但没有运气。

不确定正确的方法是什么。

1 个答案:

答案 0 :(得分:2)

首先,您需要将日期存储到列表中,以便稍后将其绑定到网格转发器。由于您需要 CheckBoxList ,因此您可以使用 TemplateField

将日期添加到数据库中的列表中。

IList<DateTime> dateList = new List<DateTime>();
 while (reader.Read())
 {
   //Check if your reader is not empty and has a valid date before adding.
   dateList.add(reader.GetDateTime(0).ToString("MM/dd/yyyy"))
 }

修改

假设您有此课程

 public class MyCustomDate
    {
        public DateTime Date { get; set; }
        public bool IsChecked { get; set; }
        public string Description { get; set; }
    }

在您的网页加载中,代码与此类似

 protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            IList<MyCustomDate> dates = new List<MyCustomDate>();

            dates.Add(new MyCustomDate() { Date = DateTime.Now.AddYears(1), IsChecked = true, Description = "First Date" });
            dates.Add(new MyCustomDate() { Date = DateTime.Now.AddYears(2), IsChecked = false, Description = "Second Date" });
            dates.Add(new MyCustomDate() { Date = DateTime.Now.AddYears(3), IsChecked = true, Description = "Third Date" });


            this.rptTest.DataSource = dates;
            this.rptTest.DataBind();
        }
    }

您的HTML

<asp:Repeater runat="server" ID="rptTest" >
    <HeaderTemplate>
        <table style="width: 100%">
    </HeaderTemplate>
    <ItemTemplate>
        <tr>
            <td>
                <span><%# Eval("Description") %></span>
            </td>
            <td>
                <asp:CheckBox ID="chkTest" runat="server" Checked='<%#Convert.ToBoolean(Eval("IsChecked"))%>' />
            </td>
        </tr>
    </ItemTemplate>
</asp:Repeater>

完成后,您可以将列表绑定到带有模板字段的转发器或网格中。 Repeater Example Link