Repeater
ItemDataBound主要是用来最后改变一次repeat在客户端加载的数据主要用来设置 ItemCommand主要是利用repeat的按钮控件的CommandName和CommandArgument
1.ItemCommand实例
protected void Repeater3_ItemCommand(object source, RepeaterCommandEventArgs e)
{
if (e.CommandName == "启用")//CommandName主要使前台代码和后台代码打交道
{
T_UsersTableAdapter adapter = new T_UsersTableAdapter();
long id= Convert.ToInt64(e.CommandArgument);//CommandArgument主要使后台与数据库打交道
adapter.AlterjiyongById(id);
Repeater3.DataBind();
}
else if (e.CommandName == "禁用")
{
T_UsersTableAdapter adapter = new T_UsersTableAdapter();
long id = Convert.ToInt64(e.CommandArgument);
adapter.AlterqiyongByID(id);
Repeater3.DataBind();
}
else {
throw new Exception("有错");
}
}
2. ItemDataBound实例
protected void Repeater3_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)//指触发对象的类型是DadaList里的基本行或是替换行(简单的说是Repeater里的所有数据项内容)
{
DataRowView drv = (DataRowView)e.Item.DataItem;
var row = (WebApplication1.ObjDateScr.DAL.DataSetPerson.T_UsersRow)drv.Row;
if (row.state == "禁用")
{
HtmlTableRow trRow = (HtmlTableRow)e.Item.FindControl("trRow");
trRow.Attributes["class"] = "trRow";//给<tr runat="server" class="trRow">的行添加属性
Button btn = (Button)e.Item.FindControl("disable");
btn.Visible = false;
Button btn2 = (Button)e.Item.FindControl("able");
btn2.Visible = true;
}
else if (row.state == "启用")
{
HtmlTableRow trRow = (HtmlTableRow)e.Item.FindControl("trRow");
trRow.Attributes["class"] = "";
Button btn = (Button)e.Item.FindControl("disable");
btn.Visible = true;
Button btn2 = (Button)e.Item.FindControl("able");
btn2.Visible = false;
}
else
{
throw new Exception("非法的状态");
}
}
}
----------------------------------------------------------------------------------------------------------------------------------------------------
//两个Repeat嵌套使用
页面代码
<asp:Repeater runat="server" ID="Repeater1" OnItemDataBound="Repeater1_ItemDataBound">
<ItemTemplate>
<!--时政板块 start-->
<div class="newsBlock">
<div class="topTitle">
<div class="floatRight">
<img src="../../Statics/FrontBBS/images/title_right.jpg" /></div>
<div class="floatLeft">
<img src="../../Statics/FrontBBS/images/title_left.jpg" /></div>
<h2>
<%# Eval("PlateName")%></h2>
<div class="table-head">
<span style="float: right; width: 34%;"><em class="floatRight showTable"></em>最后发表</span>
<span style="float: right; width: 12%;">主题/贴数</span></div>
</div>
<div class="content">
<table cellpadding="0" cellspacing="0" class="table-list" width="100%">
<tbody>
<asp:Repeater runat="server" ID="Repeater2">
<ItemTemplate>
<tr>
<td width="8%">
<a href="#">
<img src=<%# Eval("ThemeImg" )!=null? Eval("ThemeImg"):"../../Statics/FrontBBS/images/icon01.jpg"%> /></a>
</td>
<td width="45%">
<h3>
<a href="PostsList.aspx?PlateName=<%# Eval("PlateName")%>&ThemeName=<%# Eval("ThemeName")%>&ThemeID=<%# Eval("ThemeID")%>">
<%# Eval("ThemeName")%></a> <span class="normal">(今日发帖:<em><%# Eval("TodayPostsNum")%></em>)</span></h3>
<p>
<%# Eval("Description")%></p>
</td>
<td width="12%">
<span class="yellow">
<%# Eval("PostsNum")%></span>
</td>
<td width="35%">
<a href="info.html">
<%# Eval("lastPostsTitle")%></a>
<p>
作者:<%# Eval("lastTitlePublishUserName")%></p>
</td>
</tr>
</ItemTemplate>
</asp:Repeater>
</tbody>
</table>
</div>
<div class="bottom">
<div class="floatRight">
<img src="../../Statics/FrontBBS/images/bottom_right.jpg" /></div>
<div class="floatLeft">
<img src="../../Statics/FrontBBS/images/bottom_left.jpg" /></div>
</div>
</div>
<!--时政板块 end-->
</ItemTemplate>
</asp:Repeater>
后台代码
ThemeAndPostsService _ThemeAndPostsService = new ThemeAndPostsService();
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindThemeRepeater();
}
}
private void BindThemeRepeater()
{
this.Repeater1.DataSource = _ThemeAndPostsService.GetPlateList();
this.Repeater1.DataBind();
}
protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
Repeater r = (Repeater)e.Item.FindControl("Repeater2");
Plate Plate = (Plate)e.Item.DataItem;
BindThemeAndPostsList(r, Plate);
}
}
private void BindThemeAndPostsList(Repeater r, Plate Plate)
{
r.DataSource = _ThemeAndPostsService.GetThemeAndPostsList(Plate);
r.DataBind();
}
服务代码
public class ThemeAndPostsService
{
private readonly Dao _dao = Dao.Get();
public IList<Plate> GetPlateList()
{
return _dao.QueryEntities<Plate>("ZJForum.GetPlateList", null);
}
public IList<ThemeAndPosts> GetThemeAndPostsList(Plate Plate)
{
var param = new Dictionary<string, object>() { { "PlateID", Plate.PlateID } };
return _dao.QueryEntities<ThemeAndPosts>("ZJForum.GetThemeAndPostsList", param);
}
}
------------------------------------------------------------------------------------------------------------------------------------------------
// repeater 生成的列表,及填了数据后的列表数据的获取
<!--每天要安排的任务-->
<div style="height: 520px; overflow: auto; width: 780px;">
<asp:Repeater runat="server" ID="Repeater1">
<HeaderTemplate>
<table>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>
<asp:Label ID="lEveryDayTime" runat="server" Text='<%# Eval("WorkingDate")%>'></asp:Label>
<asp:HiddenField ID="hfDetailID" runat="server" Value='<%# Eval("DetailID")%>' />
</td>
<td>
<table>
<tr>
<td>
上午:
</td>
<td>
<asp:TextBox runat="server" ID="Forenoon" Text='<%# Eval("AMDetails")%>' TextMode="MultiLine"
Rows="5" Columns="40" Width="600px" data-validator="required,length[1,100]"></asp:TextBox>
</td>
</tr>
<tr>
<td>
下午:
</td>
<td>
<asp:TextBox runat="server" ID="Afternoon" Text='<%# Eval("PMDetails")%>' TextMode="MultiLine"
Rows="5" Columns="40" Width="600px" data-validator="required,length[1,100]"></asp:TextBox>
</td>
</tr>
</table>
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
</div>
后台代码: 生成repeater数据的
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
if (Request["FormViewMode"] == "Insert")
{
JudgeIsWorkWeekData();
Repeater1.DataSource = datalist; //初始化空的数据
for (int i = 0; i < datalist.Count; i++)
{
this.txtWorkingPlanBegin.Text = datalist[0].WorkingDate;
this.txtWorkingPlanEnd.Text = datalist[i].WorkingDate;
}
Repeater1.DataBind();
}
else if (Request["FormViewMode"] == "Edit")
{
SmartForm.Fill(container, "data_workingplan.getbyId");
string ID = Request["ID"] == null ? string.Empty : Request["ID"].ToString();
Repeater1.DataSource = PlanDetailsBLL.GetList(ID);
Repeater1.DataBind();
}
}
}
/// </summary>
/// <summary>
/// 判断是否是工作周,以及初始化下周的每天时间数据
/// </summary>
private void JudgeIsWorkWeekData()
{
if (DateExtend.IsWorkDay(CalculateFirstDateOfNextWeek(DateTime.Now)))
{
Data_WorkingPlanDetails onedata = new Data_WorkingPlanDetails();
onedata.WorkingDate = CalculateFirstDateOfNextWeek(DateTime.Now).ToString("yyyy-MM-dd");
datalist.Add(onedata);
}
if (DateExtend.IsWorkDay(CalculateFirstDateOfNextWeek(DateTime.Now).AddDays(1)))
{
Data_WorkingPlanDetails twodata = new Data_WorkingPlanDetails();
twodata.WorkingDate = CalculateFirstDateOfNextWeek(DateTime.Now).AddDays(1).ToString("yyyy-MM-dd");
datalist.Add(twodata);
}
if (DateExtend.IsWorkDay(CalculateFirstDateOfNextWeek(DateTime.Now).AddDays(2)))
{
Data_WorkingPlanDetails threedata = new Data_WorkingPlanDetails();
threedata.WorkingDate = CalculateFirstDateOfNextWeek(DateTime.Now).AddDays(2).ToString("yyyy-MM-dd");
datalist.Add(threedata);
}
if (DateExtend.IsWorkDay(CalculateFirstDateOfNextWeek(DateTime.Now).AddDays(3)))
{
Data_WorkingPlanDetails fourdata = new Data_WorkingPlanDetails();
fourdata.WorkingDate = CalculateFirstDateOfNextWeek(DateTime.Now).AddDays(3).ToString("yyyy-MM-dd");
datalist.Add(fourdata);
}
if (DateExtend.IsWorkDay(CalculateFirstDateOfNextWeek(DateTime.Now).AddDays(4)))
{
Data_WorkingPlanDetails fivedata = new Data_WorkingPlanDetails();
fivedata.WorkingDate = CalculateFirstDateOfNextWeek(DateTime.Now).AddDays(4).ToString("yyyy-MM-dd");
datalist.Add(fivedata);
}
if (DateExtend.IsWorkDay(CalculateFirstDateOfNextWeek(DateTime.Now).AddDays(5)))
{
Data_WorkingPlanDetails sixdata = new Data_WorkingPlanDetails();
sixdata.WorkingDate = CalculateFirstDateOfNextWeek(DateTime.Now).AddDays(5).ToString("yyyy-MM-dd");
datalist.Add(sixdata);
}
if (DateExtend.IsWorkDay(CalculateFirstDateOfNextWeek(DateTime.Now).AddDays(6)))
{
Data_WorkingPlanDetails sevendata = new Data_WorkingPlanDetails();
sevendata.WorkingDate = CalculateFirstDateOfNextWeek(DateTime.Now).AddDays(6).ToString("yyyy-MM-dd");
datalist.Add(sevendata);
}
}
获取repeater中填写的数据保存数据库
public string PlanId
{
get { return ViewState["PlanId"] == null ? string.Empty : ViewState["PlanId"].ToString(); }
set { ViewState["PlanId"] = value; }
}
Data_WorkingPlanBLL PlanBLL = new Data_WorkingPlanBLL();
protected void SaveOrUpdatPlanDetails(object sender, EventArgs e)
{
Data_WorkingPlan Plan = SmartForm.GetEntity<Data_WorkingPlan>(container);
PlanId = PlanBLL.SaveOrUpdate(Plan);
List<Data_WorkingPlanDetails> lsto = GetAllPlan(PlanId);
foreach (Data_WorkingPlanDetails item in lsto)
{
PlanDetailsBLL.SaveOrUpdate(item);
}
ScriptHelper.AlertAndClose(this.Page, "保存成功!!!", true);
}
/// <summary>
/// 获取安排的任务计划
/// </summary>
/// <param name="PlanId"></param>
/// <returns></returns>
private List<Data_WorkingPlanDetails> GetAllPlan(string PlanId)
{
List<Data_WorkingPlanDetails> lsto = new List<Data_WorkingPlanDetails>();
foreach (RepeaterItem ri in Repeater1.Items)
{
Data_WorkingPlanDetails PlanDetails = new Data_WorkingPlanDetails();
Label label = (Label)ri.FindControl("lEveryDayTime");
HiddenField hfDetailID = (HiddenField)ri.FindControl("hfDetailID");
TextBox txtForenoon = (TextBox)ri.FindControl("Forenoon");
TextBox txtAfternoon = (TextBox)ri.FindControl("Afternoon");
PlanDetails.DetailID = hfDetailID.Value;
PlanDetails.ID = PlanId;
PlanDetails.WorkingDate = label.Text;
PlanDetails.AMDetails = txtForenoon.Text;
PlanDetails.PMDetails = txtAfternoon.Text;
lsto.Add(PlanDetails);
}
return lsto;
}
/// <summary>
/// 计算下周起始日期(礼拜一的日期)
/// </summary>
/// <param name="someDate">当前系统时间</param>
/// <returns></returns>
public static DateTime CalculateFirstDateOfNextWeek(DateTime someDate)
{
int i = someDate.DayOfWeek - DayOfWeek.Monday;
if (i == -1) i = 6;// i值 > = 0 ,因为枚举原因,Sunday排在最前,此时Sunday-Monday=-1,必须+7=6。
TimeSpan ts = new TimeSpan(i + 7, 0, 0, 0);
return someDate.Add(ts);
}
#region
///// <summary>
///// 计算本周起始日期(礼拜一的日期)
///// </summary>
///// <param name="someDate">当前系统时间</param>
///// <returns></returns>
//public static DateTime CalculateFirstDateOfWeek(DateTime someDate)
//{
// int i = someDate.DayOfWeek - DayOfWeek.Monday;
// if (i == -1) i = 6;// i值 > = 0 ,因为枚举原因,Sunday排在最前,此时Sunday-Monday=-1,必须+7=6。
// TimeSpan ts = new TimeSpan(i, 0, 0, 0);
// return someDate.Subtract(ts);
//}
///// <summary>
///// 计算本周结束日期(礼拜日的日期)
///// </summary>
///// <param name="someDate">当前系统时间</param>
///// <returns></returns>
//public static DateTime CalculateLastDateOfWeek(DateTime someDate)
//{
// int i = someDate.DayOfWeek - DayOfWeek.Sunday;
// if (i != 0) i = 7 - i;// 因为枚举原因,Sunday排在最前,相减间隔要被7减。
// TimeSpan ts = new TimeSpan(i, 0, 0, 0);
// return someDate.Add(ts);
//}
///// <summary>
///// 判断选择的日期是否是本周
///// </summary>
///// <param name="someDate"></param>
///// <returns></returns>
//public static bool IsThisWeek(DateTime someDate)
//{
// //得到someDate对应的周一
// DateTime someMon = CalculateFirstDateOfWeek(someDate);
// //得到本周一
// DateTime nowMon = CalculateFirstDateOfWeek(DateTime.Now);
// TimeSpan ts = someMon - nowMon;
// if (ts.Days < 0)
// ts = -ts;//取正
// if (ts.Days >= 7)
// {
// return false;
// }
// else
// {
// return true;
// }
//}
#endregion
}

浙公网安备 33010602011771号