
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; namespace xxxx { public class RepeaterSetting { /// <summary> /// 合并Repeater中某行相同信息的行(单元格) /// </summary> /// <param name="repeater">Repeater对象</param> /// <param name="cellID">某个单元格ID</param> public static void GroupRow(Repeater repeater, string cellID) { int count = repeater.Items.Count; for (int i = count - 1; i > 0; i--) { RepeaterItem rpTprevious = repeater.Items[i - 1]; RepeaterItem rpT = repeater.Items[i]; MergeCells(rpTprevious, rpT, cellID, cellID); } } /// <summary> /// 合并Repeater中某行相同信息的行(单元格) /// </summary> /// <param name="repeater">Repeater对象</param> /// <param name="cellIDs">某些单元格ID</param> public static void GroupRow(Repeater repeater, params string[] cellIDs) { int count = repeater.Items.Count; for (int i = count - 1; i > 0; i--) { RepeaterItem rpTprevious = repeater.Items[i - 1]; RepeaterItem rpT = repeater.Items[i]; for (int j = 0; j < cellIDs.Length; j++) { MergeCells(rpTprevious, rpT, cellIDs[j], cellIDs[0]); } } } /// <summary> /// 设置Repeater行背景的间隔颜色 /// </summary> /// <param name="repeater">Repeater对象</param> /// <param name="firRowID">第一行ID</param> /// <param name="secRowID">第二行ID</param> public static void SetBackgroundColor(Repeater repeater, string firRowID, string secRowID) { int count = repeater.Items.Count; int i = 0; while (i < count) { HtmlTableRow htmRow = repeater.Items[i].FindControl(firRowID) as HtmlTableRow; HtmlTableRow htmRow2 = repeater.Items[i].FindControl(secRowID) as HtmlTableRow; if (htmRow != null) { htmRow.Style.Add("background-color", "#B5F7C0"); } if (htmRow2 != null) { htmRow2.Style.Add("background-color", "#B5F7C0"); } i++; if (i < count) { htmRow = repeater.Items[i].FindControl(firRowID) as HtmlTableRow; htmRow2 = repeater.Items[i].FindControl(secRowID) as HtmlTableRow; if (htmRow != null) { htmRow.Style.Add("background-color", ""); } if (htmRow2 != null) { htmRow2.Style.Add("background-color", ""); } i++; } } } /// <summary> /// 设置Repeater行背景的间隔颜色 /// </summary> /// <param name="repeater">Repeater对象</param> /// <param name="firRowID">第一行ID</param> /// <param name="secRowID">第二行ID</param> public static void SetBackgroundColorByRow(Repeater repeater, string firRowID, string secRowID,string thiRowID) { int count = repeater.Items.Count; int i = 0; while (i < count) { HtmlTableRow htmRow = repeater.Items[i].FindControl(firRowID) as HtmlTableRow; HtmlTableRow htmRow2 = repeater.Items[i].FindControl(secRowID) as HtmlTableRow; HtmlTableRow htmRow3 = repeater.Items[i].FindControl(thiRowID) as HtmlTableRow; if (htmRow != null && htmRow2 != null) { htmRow.Style.Add("background-color", "#B5F7C0"); htmRow2.Style.Add("background-color", "#B5F7C0"); htmRow3.Style.Add("background-color", "#B5F7C0"); } i++; if (i < count) { htmRow = repeater.Items[i].FindControl(firRowID) as HtmlTableRow; htmRow2 = repeater.Items[i].FindControl(secRowID) as HtmlTableRow; htmRow3 = repeater.Items[i].FindControl(secRowID) as HtmlTableRow; if (htmRow != null && htmRow2 != null) { htmRow.Style.Add("background-color", ""); htmRow2.Style.Add("background-color", ""); htmRow3.Style.Add("background-color", ""); } i++; } } } /// <summary> /// 设置Repeater行背景的间隔颜色 /// </summary> /// <param name="repeater">Repeater对象</param> /// <param name="mergeCellID">合并单元格ID</param> /// <param name="firRowID">第一行ID</param> /// <param name="secRowID">第二行ID</param> public static void SetBackgroundColor(Repeater repeater, string mergeCellID, string firRowID, string secRowID) { int count = repeater.Items.Count; int i = 0; while (i < count) { HtmlTableCell tc = repeater.Items[i].FindControl(mergeCellID) as HtmlTableCell; if (tc.Visible) { int start = tc.RowSpan / 2 + i; for (int j = i; j < start; j++) { HtmlTableRow htmRow = repeater.Items[j].FindControl(firRowID) as HtmlTableRow; HtmlTableRow htmRow2 = repeater.Items[j].FindControl(secRowID) as HtmlTableRow; if (htmRow != null && htmRow2 != null) { htmRow.Style.Add("background-color", "#B5F7C0"); htmRow2.Style.Add("background-color", "#B5F7C0"); } } i = start; } else { i++; } if (i < count) { tc = repeater.Items[i].FindControl(mergeCellID) as HtmlTableCell; if (tc.Visible) { int start = tc.RowSpan / 2 + i; for (int j = i; j < start; j++) { HtmlTableRow htmRow = repeater.Items[j].FindControl(firRowID) as HtmlTableRow; HtmlTableRow htmRow2 = repeater.Items[j].FindControl(secRowID) as HtmlTableRow; if (htmRow != null && htmRow2 != null) { htmRow.Style.Add("background-color", ""); htmRow2.Style.Add("background-color", ""); } } i = start; } else { i++; } } } } private static void MergeCells(RepeaterItem rpTprevious, RepeaterItem rpT, string cellID, string keyCellID) { HtmlTableCell oCell_previous = rpTprevious.FindControl(cellID) as HtmlTableCell; HtmlTableCell oCell = rpT.FindControl(cellID) as HtmlTableCell; if (oCell_previous != null && oCell != null) { oCell.RowSpan = (oCell.RowSpan == -1) ? 1 : oCell.RowSpan; oCell_previous.RowSpan = (oCell_previous.RowSpan == -1) ? 1 : oCell_previous.RowSpan; if (oCell.Controls.Count > 1 && oCell_previous.Controls.Count > 1) { bool needMerge = false; if (oCell.Controls[1] is LinkButton) { LinkButton licPre = oCell.Controls[1] as LinkButton; LinkButton lic = oCell_previous.Controls[1] as LinkButton; if (licPre != null && lic != null && lic.Text.Trim() == licPre.Text.Trim()) { needMerge = true; } } else if (oCell.Controls[1] is Label) { Label licPre = oCell.Controls[1] as Label; Label lic = oCell_previous.Controls[1] as Label; if (licPre != null && lic != null && lic.Text.Trim() == licPre.Text.Trim()) { needMerge = true; } } if (needMerge) { if (HasMerge(rpTprevious, rpT, cellID, keyCellID)) { return; } oCell.Visible = false; oCell_previous.RowSpan += oCell.RowSpan; } } else if (oCell.InnerText == oCell_previous.InnerText) { if (HasMerge(rpTprevious, rpT, cellID, keyCellID)) { return; } oCell.Visible = false; oCell_previous.RowSpan += oCell.RowSpan; } } } private static bool HasMerge(RepeaterItem rpTprevious, RepeaterItem rpT, string cellID, string keyCellID) { if (cellID != keyCellID) { HtmlTableCell keyCellPrev = rpTprevious.FindControl(keyCellID) as HtmlTableCell; HtmlTableCell keyCell = rpT.FindControl(keyCellID) as HtmlTableCell; if (keyCellPrev != null && keyCell != null) { if (keyCellPrev.Controls.Count > 1 && keyCell.Controls.Count > 1) { if (keyCell.Controls[1] is LinkButton) { LinkButton licPre = keyCell.Controls[1] as LinkButton; LinkButton lic = keyCellPrev.Controls[1] as LinkButton; if (licPre != null && lic != null && lic.Text.Trim() != licPre.Text.Trim()) { return true; } } else if (keyCell.Controls[1] is Label) { Label licPre = keyCell.Controls[1] as Label; Label lic = keyCellPrev.Controls[1] as Label; if (licPre != null && lic != null && lic.Text.Trim() != licPre.Text.Trim()) { return true; } } } else if (keyCellPrev.InnerText.Trim() != keyCell.InnerText.Trim()) { return true; } } } return false; } } }
引用实例:
this.rpt_request.DataSource = ds.Tables[0]; this.rpt_request.DataBind(); RepeaterSetting.SetBackgroundColor(rpt_request, "Td2", "row1", "row2");
另一种方式:
private void SetRepeaterProperties() { foreach (RepeaterItem item in rpt_request.Items) { HtmlTableCell maxNum = item.FindControl("MaxNumCol") as HtmlTableCell; HtmlTableCell enrolmentNum = item.FindControl("EnrolmentNumCol") as HtmlTableCell; if (maxNum != null && enrolmentNum != null) { HtmlTableRow htmRow = item.FindControl("row1") as HtmlTableRow; HtmlTableRow htmRow2 = item.FindControl("row2") as HtmlTableRow; int maxNum_value =Convert.ToInt32(maxNum.InnerText.Trim()); int enrolmentNum_value =Convert.ToInt32(enrolmentNum.InnerText.Trim()); if (enrolmentNum_value >= maxNum_value) { if (htmRow != null && htmRow2 != null) { htmRow.Style.Add("background-color", "Red"); htmRow2.Style.Add("background-color", "Red"); } } if (enrolmentNum_value == 0) { if (htmRow != null && htmRow2 != null) { htmRow.Style.Add("background-color", "Yellow"); htmRow2.Style.Add("background-color", "Yellow"); } } } } }