注意:我是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方法,但没有运气。
不确定正确的方法是什么。
答案 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