using System;
using System.Data;
using System.Web.UI;
using System.Web.UI.WebControls;
using DeiNiu.Utils;
using DeiNiu.wms.Logical;
public partial class PublicNewsMain : PageBase
{
    private LPublicNews _logic;
    protected void Page_Load(object sender, EventArgs e)
    {
  
        if (!IsPostBack)
        {
            _logic = new LPublicNews();
            Databound();
        }
        SessionSeting();
    }
 
    /*****************************************   private methods   ******************************************/
    /// 
    /// bound the query list.
    /// 
    private void Databound()
    {
         
        
        //装载选定节点的数据
        DataView dv = new DataView(_logic.QueryPublicInfomation());
        
        TreeAuth.SelectedNode.ChildNodes.Clear();
        BindTree(TreeAuth.SelectedNode.Value, TreeAuth.SelectedNode, dv);
        //绑定树列表里选中的所有数据
        
        GridView1.DataSource = _logic.QueryNews(Convert.ToInt32(TreeAuth.SelectedValue));
        GridView1.DataBind();
       //  GVFiles.DataSource = null;
       // GVFiles.DataBind();
        UpdateSession();
        ClearDetail();
    }
    private void SessionSeting()
    {
        if (IsPostBack)
        {
            _logic = (LPublicNews)Session[appScope.PagelevelObj];
        }
    }
    private void UpdateSession()
    {
        Session[appScope.PagelevelObj] = _logic;
    }
    /// 
    /// set data from shift object to page
    /// 
    private void DetailDataBind()
    {
        DataDetail.Visible = true;
        txtTitle.Text = _logic.GetPublicNews.news_title;
        txtDesc.Text = _logic.GetPublicNews.news_content; 
    }
    /************************************** protected methods (event listeners) ********************************/
    protected void btnAddnew_Click(object sender, EventArgs e)
    {
        chgOperTxt(true);
        _logic.Initialize();
      
        GridView1.SelectedIndex = -1;
        Databound();
        DetailDataBind();
       //todo bind attached files infomationsss\\
    }
    protected void DetailsView1_PageIndexChanging(object sender, DetailsViewPageEventArgs e)
    {
    }
    protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
    {
        chgOperTxt(false);
        if (GridView1.DataKeys != null)
        {
            string id = GridView1.DataKeys[e.NewEditIndex].Value.ToString();
            _logic.Initialize(int.Parse(id));
        }
        Databound();
        DetailDataBind();
    }
    protected void btnSubmit_Click(object sender, EventArgs e)
    {
        SetDataBack();
        //shifts id eq 0 means this is new one,to add; else an old one, to update
    
        int oper = 0;
        oper = _logic.GetPublicNews.ID > 0 ? _logic.GetPublicNews.Update() : _logic.GetPublicNews.Add();
        ClearDetail();
        Databound();
        lbEdit.Text = "";
    }
    protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
        
        if (GridView1 != null)
        {
            if (GridView1.DataKeys != null)
            {
                string id = GridView1.DataKeys[e.RowIndex].Value.ToString();
                _logic.Initialize(int.Parse(id));
            }
        }
        /*
        _logic.GetRole.dr = false;
        _logic.GetRole.Update();
        
       */
        _logic.GetPublicNews.Delete();
        ClearDetail();
        Databound();
    }
    protected void GridView1_PageIndexChanged(object sender, EventArgs e)
    {
    }
    protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        GridView1.PageIndex = e.NewPageIndex;
        Databound();
        //GridView1.DataSource = shiftLgc.getAllShifts().Tables[0];
        //     GridView1.DataBind();    
    }
    protected void GridView1_DataBinding(object sender, EventArgs e)
    {
    }
    
    protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
    {
    }
    //reset the page
    protected void btnCancel_Click(object sender, EventArgs e)
    {
        _logic.Initialize();
        Page_Load(this, e);
    }
    /***************************************** internal methods ********************************************/
    /// 
    /// set data from page to shift object
    /// 
    private void SetDataBack()
    {
        //    _logic.GetRole.operater = Session["CurrentUserID"].ToString();  todo: write a public method to handle operater,createtime,lastmodfied ... log info.
        if (!(_logic.GetPublicNews.ID > 0)) 
       {
           //_logic.GetPublicNews.last_modified  = DateTime.Now.ToString();
           _logic.GetPublicNews.news_authority = Convert.ToInt32(TreeAuth.SelectedValue);
       }
       _logic.GetPublicNews.news_title = txtTitle.Text;
       _logic.GetPublicNews.news_content = txtDesc.Text; 
       
        //todo bind files
    }
    private void chgOperTxt(bool addNew)
    {
        DataDetail.Visible = true;
        lbEdit.Text = addNew ? "增加新记录" : "修改现有记录";
        btnSubmit.Enabled = true;
    }
    private void ClearDetail()
    {
        txtTitle.Text = ""; 
        txtDesc.Text = "";
       
        DataDetail.Visible = false;
    }
    protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
    {
        chgOperTxt(false);
        if (GridView1.DataKeys != null)
        {
            string id = GridView1.DataKeys[GridView1.SelectedIndex].Value.ToString();
            _logic.Initialize(int.Parse(id));
        }
        Databound();
        DetailDataBind();
    }
    public void BindTree(string id, TreeNode pNode, DataView dv)
    {
        dv.RowFilter = "auth_uplevel = '" + id + "'";
        foreach (DataRowView row in dv)
        {
            TreeNode node = new TreeNode();
            node.Text = row["auth_name"].ToString();
            node.Value = row["ID"].ToString();
            if (pNode == null)
                //说明是根节点
            {
            
                TreeAuth.Nodes.Add(node);
                node.Expanded = true;
      
            }
            else
            {
                pNode.ChildNodes.Add(node);
                node.Expanded = true;
                
            }
            BindTree(node.Value, node, new DataView(dv.Table));
        }
    }
   
    protected void TreeAuth_SelectedNodeChanged1(object sender, EventArgs e)
    {
        GridView1.SelectedIndex = -1;
        DataView dv = new DataView(_logic.QueryNews(Convert.ToInt32(TreeAuth.SelectedValue))); 
        GridView1.DataSource = dv;
        GridView1.DataBind(); 
        ClearDetail();
    }
    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
         
        switch (e.Row.RowType)
        {
            case DataControlRowType.DataRow:
                if (e.Row.Cells[2].Text.Trim().Length > 30) e.Row.Cells[2].Text = e.Row.Cells[2].Text.Substring(0,30)+"....";
                
                break;
        }
    }
}