zoukankan      html  css  js  c++  java
  • Repeater控件合并相同信息行及设定行背景颜色“类”

    View Code
    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");
                            }
                        }
    
                    }
                    
                }
            }
  • 相关阅读:
    如何只通过Sandboxed Solution启动一个定时执行的操作
    创建与SharePoint 2010风格一致的下拉菜单 (续) 整合Feature Custom Action框架
    创建与SharePoint 2010风格一致的下拉菜单
    《SharePoint 2010 应用程序开发指南》第二章预览
    SharePoint 2013 App 开发 (1) 什么是SharePoint App?
    使用Jscex增强SharePoint 2010 JavaScript Client Object Model (JSOM)
    搜索范围的管理
    SharePoint 2010 服务应用程序(Service Application)架构(1)
    SharePoint 2010 服务应用程序(Service Application)架构(2)
    SharePoint 2013 App 开发 (2) 建立开发环境
  • 原文地址:https://www.cnblogs.com/captainR/p/Repeater.html
Copyright © 2011-2022 走看看