using System;
using System.Collections.Generic;
using System.Linq;
using System.Data;
using System.Data.SqlClient;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using BLL;

namespace FineUIPro.Web.common.ProjectSet
{
    public partial class ProjectUnit : PageBase
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            // 表头过滤
            FilterDataRowItem = FilterDataRowItemImplement;
            if (!IsPostBack)
            {
                this.drpProjectId.DataTextField = "ProjectCode";
                this.drpProjectId.DataValueField = "ProjectId";
                this.drpProjectId.DataSource = BLL.Base_ProjectService.GetOnProjectListByUserId(this.CurrUser.UserId);
                this.drpProjectId.DataBind();
                Funs.FineUIPleaseSelect(this.drpProjectId);

                ddlPageSize.SelectedValue = Grid1.PageSize.ToString();

                InitTreeMenu();//加载树
            }
        }

        private void BindGrid()
        {
            string strSql = @"select * from View_Common_Project_UnitList
                              where ProjectId=@ProjectId";

            SqlParameter[] parameter = new SqlParameter[]       
                    {
                        new SqlParameter("@ProjectId",this.tvProject.SelectedNodeID)
                    };

            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();
        }

        #region 表头过滤
        protected void Grid1_FilterChange(object sender, EventArgs e)
        {
            BindGrid();
        }

        private bool FilterDataRowItemImplement(object sourceObj, string fillteredOperator, object fillteredObj, string column)
        {
            bool valid = false;
            if (column == "UnitCode")
            {
                string sourceValue = sourceObj.ToString();
                string fillteredValue = fillteredObj.ToString();
                if (fillteredOperator == "equal")
                {
                    if (sourceValue == fillteredValue)
                    {
                        valid = true;
                    }
                }
                else if (fillteredOperator == "contain")
                {
                    if (sourceValue.Contains(fillteredValue))
                    {
                        valid = true;
                    }
                }
            }

            else if (column == "UnitName")
            {
                string sourceValue = sourceObj.ToString();
                string fillteredValue = fillteredObj.ToString();
                if (fillteredOperator == "equal")
                {
                    if (sourceValue == fillteredValue)
                    {
                        valid = true;
                    }
                }
                else if (fillteredOperator == "contain")
                {
                    if (sourceValue.Contains(fillteredValue))
                    {
                        valid = true;
                    }
                }
            }
            return valid;
        }

        #endregion

        #region
        /// <summary>
        /// 加载树
        /// </summary>
        private void InitTreeMenu()
        {
            this.tvProject.Nodes.Clear();        

            TreeNode rootProjectNode1 = new TreeNode();
            //rootProjectNode1.Text = "管道安装";
            rootProjectNode1.NodeID = "1";
            rootProjectNode1.Expanded = true;
            this.tvProject.Nodes.Add(rootProjectNode1);

            TreeNode rootProjectNode2 = new TreeNode();
            rootProjectNode2.Text = "压力容器";
            rootProjectNode2.NodeID = "2";
            //rootProjectNode1.Expanded = true;
            this.tvProject.Nodes.Add(rootProjectNode2);

            BoundTree(rootProjectNode1.Nodes,"1");
            BoundTree(rootProjectNode2.Nodes,"2");
        }

        /// <summary>
        /// 添加项目
        /// </summary>
        /// <param name="nodes"></param>
        /// <param name="parentId"></param>
        /// <param name="type"></param>
        private void BoundTree(TreeNodeCollection nodes,string projectSoft)
        {
            List<Model.Base_Project> projectLists = BLL.Base_ProjectService.GetOnProjectListByUserId(this.CurrUser.UserId, projectSoft);
            if (this.drpProjectId.SelectedValue != null && this.drpProjectId.SelectedValue != "null")
            {
                projectLists = projectLists.Where(e => e.ProjectId == this.drpProjectId.SelectedValue).ToList();
            }
            if (projectLists.Count() > 0)
            {
                TreeNode tn = null;
                foreach (var q in projectLists)
                {
                    tn = new TreeNode();
                    tn.Text = q.ProjectCode;
                    tn.NodeID = q.ProjectId;
                    tn.ToolTip = q.ProjectName;
                    tn.EnableClickEvent = true;
                    nodes.Add(tn);
                }
            }
        }

        #endregion

        /// <summary>
        /// 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void drpProjectId_SelectedIndexChanged(object sender, EventArgs e)
        {
            this.InitTreeMenu();
        }

        #region 点击TreeView
        /// <summary>
        /// 点击TreeView
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void tvProject_NodeCommand(object sender, TreeCommandEventArgs e)
        {
            if (this.tvProject.SelectedNodeID != "0" && this.tvProject.SelectedNode!=null)
            {
                BindGrid();
            }
        }
        #endregion

        #region 页索引改变事件
        /// <summary>
        /// 页索引改变事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Grid1_PageIndexChange(object sender, GridPageEventArgs e)
        {
            Grid1.PageIndex = e.NewPageIndex;
            BindGrid();
        }
        #endregion

        #region 排序
        /// <summary>
        /// 排序
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Grid1_Sort(object sender, GridSortEventArgs e)
        {
            Grid1.SortDirection = e.SortDirection;
            Grid1.SortField = e.SortField;
            BindGrid();
        }
        #endregion

        #region 分页选择下拉改变事件
        /// <summary>
        /// 分页选择下拉改变事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void ddlPageSize_SelectedIndexChanged(object sender, EventArgs e)
        {
            Grid1.PageSize = Convert.ToInt32(ddlPageSize.SelectedValue);
            BindGrid();
        }
        #endregion

        protected void btnSelectUnit_Click(object sender, EventArgs e)
        {
            if (tvProject.SelectedNode != null)
            {
                PageContext.RegisterStartupScript(Window1.GetShowReference(String.Format("SelectUnit.aspx?projectId={0}", tvProject.SelectedNodeID, "编辑 - ")));
            }
            else
            {
                Alert.ShowInTop("请选择项目!", MessageBoxIcon.Warning);
            }
        }

        /// <summary>
        /// Grid双击事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Grid1_RowDoubleClick(object sender, GridRowClickEventArgs e)
        {
            PageContext.RegisterStartupScript(Window2.GetShowReference(String.Format("EditOrganization.aspx?projectId={0}&projectUnitId={1}", tvProject.SelectedNodeID,Grid1.SelectedRowID, "编辑 - ")));
        }

        #region 关闭弹出窗口
        /// <summary>
        /// 关闭弹出窗口
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Window1_Close(object sender, WindowCloseEventArgs e)
        {
            BindGrid();
        }
        #endregion
    }
}