【问题标题】:Converting label to a checkboxlist将标签转换为复选框列表
【发布时间】:2015-11-12 20:49:39
【问题描述】:

注意:我是 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();
        }

例子:

对于初学者,我将标签替换为一个复选框列表,如下所示:

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

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

不确定解决此问题的正确方法是什么。

【问题讨论】:

    标签: c# sql asp.net label checkboxlist


    【解决方案1】:

    嗯,首先您需要将日期存储到列表中,以便以后能够将其绑定到 GridRepeater。由于您需要 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

    【讨论】:

    • 抱歉延迟回复。我尝试了中继器,但没有运气。您能否发布一个比该链接上的内容更清晰的示例?
    • 我真的成功了!决定改用 ListItem 并将它们添加到 checkboxlist.items 但我有一些我想在未来使用中继器的东西所以谢谢你的建议。
    • 哦,我刚刚更新了!哈哈。祝你好运。希望这次更新能让您更轻松。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-27
    • 1970-01-01
    • 2018-07-05
    • 2016-05-11
    • 1970-01-01
    • 2020-01-30
    相关资源
    最近更新 更多