using BLL;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using AspNet = System.Web.UI.WebControls;
namespace FineUIPro.Web.HSSE.Hazard
{
    public partial class ProjectSuperviseCheckRectify : PageBase
    {
        #region 定义项
        /// 
        /// 项目id
        ///  
        public string ProjectId
        {
            get
            {
                return (string)ViewState["ProjectId"];
            }
            set
            {
                ViewState["ProjectId"] = value;
            }
        }
        #endregion
        #region 加载页面
        /// 
        /// 加载页面
        ///  
        /// 
        /// 绑定数据
        ///  
        private void BindGrid()
        {
            string strSql = string.Empty;
          
            strSql = @"SELECT SuperviseCheckRectifyId,SuperviseCheckRectifyCode,ProjectId,ProjectName,UnitId,UnitName,CheckDate,IsFromMainUnit,HandleState,HandleStateName,IssueMan,IssueDate,TotalCount,CompleteCount,UnCompleteCount"
                + @" FROM View_Supervise_SuperviseCheckRectify"
                + @" WHERE HandleState != 1";
            List listStr = new List();
            strSql += " AND ProjectId = '" + this.ProjectId + "'";
            if (!string.IsNullOrEmpty(this.CurrUser.UnitId) && !BLL.CommonService.IsMainUnitOrAdmin(this.CurrUser.UserId))
            {
                strSql += " AND UnitId = '" + this.CurrUser.UnitId + "'";
            }
            if (!string.IsNullOrEmpty(this.txtName.Text.Trim()))
            {
                strSql += " AND (SuperviseCheckRectifyCode like @name OR ProjectName like @name OR UnitName like @name OR HandleState like @name)";
                listStr.Add(new SqlParameter("@name", "%" + this.txtName.Text.Trim() + "%"));
            }
            SqlParameter[] parameter = listStr.ToArray();
            DataTable tb = SQLHelper.GetDataTableRunText(strSql, parameter);
            Grid1.RecordCount = tb.Rows.Count;
            tb = GetFilteredTable(Grid1.FilteredData, tb);
            var table = this.GetPagedDataTable(Grid1, tb);
            Grid1.DataSource = table;
            Grid1.DataBind();
            for (int i = 0; i < Grid1.Rows.Count; i++)
            {
                Model.Supervise_SuperviseCheckRectify rectify = BLL.SuperviseCheckRectifyService.GetSuperviseCheckRectifyById(Grid1.Rows[i].DataKeys[0].ToString());
                if (rectify != null)
                {
                    if (rectify.HandleState == "1")
                    {
                        Grid1.Rows[i].RowCssClass = "yellow";
                    }
                    else if (rectify.HandleState == "2")
                    {
                        Grid1.Rows[i].RowCssClass = "red";
                    }
                }
            }
        }
        #endregion
        #region 表头过滤、分页、排序、关闭窗口
        /// 
        /// 过滤表头
        ///  
        /// 
        /// 分页
        ///  
        /// 
        /// 排序
        ///  
        /// 
        /// 分页显示条数下拉框
        ///  
        /// 
        /// 关闭弹出窗
        ///  
        /// 
        /// Grid行双击事件
        ///  
        /// 
        /// 右键编辑事件
        ///  
        /// 
        /// 编辑数据方法
        ///  
        private void EditData()
        {
            
                if (Grid1.SelectedRowIndexArray.Length == 0)
                {
                    Alert.ShowInTop("请至少选择一条记录!", MessageBoxIcon.Warning);
                    return;
                }
                string SuperviseCheckRectifyId = Grid1.SelectedRowID;
                PageContext.RegisterStartupScript(Window1.GetShowReference(String.Format("ProjectSuperviseCheckRectifyEdit.aspx?SuperviseCheckRectifyId={0}", SuperviseCheckRectifyId, "编辑 - ")));
           
        }
        #endregion        
     
        #region 获取按钮权限
        /// 
        /// 获取按钮权限
        ///  
        /// 
        /// 导出方法
        ///  
        /// ");
            foreach (List rows in mht.MultiTable)
            {
                sb.Append("");
                foreach (object[] cell in rows)
                {
                    int rowspan = Convert.ToInt32(cell[0]);
                    int colspan = Convert.ToInt32(cell[1]);
                    GridColumn column = cell[2] as GridColumn;
                    sb.AppendFormat("{3} ",
                       rowspan != 1 ? " rowspan=\"" + rowspan + "\"" : "",
                       colspan != 1 ? " colspan=\"" + colspan + "\"" : "",
                      colspan != 1 ? " style=\"text-align:center;\"" : "",
                        column.HeaderText);
                }
                sb.Append(" ");
            }
            foreach (GridRow row in grid.Rows)
            {
                sb.Append("");
                foreach (GridColumn column in mht.Columns)
                {
                    string html = row.Values[column.ColumnIndex].ToString();
                    if (column.ColumnID == "tfNumber")
                    {
                        html = (row.FindControl("lblNumber") as AspNet.Label).Text;
                    }
                    sb.AppendFormat("{0} ", html);
                }
                sb.Append(" ");
            }
            sb.Append(" 
");
            return sb.ToString();
        }
        #region 多表头处理
        /// 
        /// 多表头处理
        ///  
        public class MultiHeaderTable
        {
            // 包含 rowspan,colspan 的多表头,方便生成 HTML 的 table 标签
            public List> MultiTable = new List>();
            // 最终渲染的列数组
            public List Columns = new List();
            public void ResolveMultiHeaderTable(GridColumnCollection columns)
            {
                List row = new List();
                foreach (GridColumn column in columns)
                {
                    object[] cell = new object[4];
                    cell[0] = 1;    // rowspan
                    cell[1] = 1;    // colspan
                    cell[2] = column;
                    cell[3] = null;
                    row.Add(cell);
                }
                ResolveMultiTable(row, 0);
                ResolveColumns(row);
            }
            private void ResolveColumns(List row)
            {
                foreach (object[] cell in row)
                {
                    GroupField groupField = cell[2] as GroupField;
                    if (groupField != null && groupField.Columns.Count > 0)
                    {
                        List subrow = new List();
                        foreach (GridColumn column in groupField.Columns)
                        {
                            subrow.Add(new object[]
                           {
                               1,
                                1,
                               column,
                                groupField
                            });
                        }
                        ResolveColumns(subrow);
                    }
                    else
                    {
                        Columns.Add(cell[2] as GridColumn);
                    }
                }
            }
            private void ResolveMultiTable(List row, int level)
            {
                List nextrow = new List();
                foreach (object[] cell in row)
                {
                    GroupField groupField = cell[2] as GroupField;
                    if (groupField != null && groupField.Columns.Count > 0)
                    {
                        // 如果当前列包含子列,则更改当前列的 colspan,以及增加父列(向上递归)的colspan
                        cell[1] = Convert.ToInt32(groupField.Columns.Count);
                        PlusColspan(level - 1, cell[3] as GridColumn, groupField.Columns.Count - 1);
                        foreach (GridColumn column in groupField.Columns)
                        {
                            nextrow.Add(new object[]
                           {
                               1,
                                1,
                                column,
                                groupField
                           });
                        }
                    }
                }
                MultiTable.Add(row);
                // 如果当前下一行,则增加上一行(向上递归)中没有子列的列的 rowspan
                if (nextrow.Count > 0)
                {
                    PlusRowspan(level);
                    ResolveMultiTable(nextrow, level + 1);
                }
            }
            private void PlusRowspan(int level)
            {
                if (level < 0)
                {
                    return;
                }
                foreach (object[] cells in MultiTable[level])
                {
                    GroupField groupField = cells[2] as GroupField;
                    if (groupField != null && groupField.Columns.Count > 0)
                    {
                        // ...
                    }
                    else
                    {
                        cells[0] = Convert.ToInt32(cells[0]) + 1;
                    }
                }
                PlusRowspan(level - 1);
            }
            private void PlusColspan(int level, GridColumn parent, int plusCount)
            {
                if (level < 0)
                {
                    return;
                }
                foreach (object[] cells in MultiTable[level])
                {
                    GridColumn column = cells[2] as GridColumn;
                    if (column == parent)
                    {
                        cells[1] = Convert.ToInt32(cells[1]) + plusCount;
                        PlusColspan(level - 1, cells[3] as GridColumn, plusCount);
                    }
                }
            }
        }
        #endregion
        #endregion
        /// 
        /// 查询
        ///  
        ///