protected void Session_Start(object sender, EventArgs e)
 {
     Session["updateinfo"] = new HPMUpdateInfo();
     var sessions = (List<HttpSessionState>)Application["sessions"];
     sessions.Add(Session);
     
 }
        protected void Session_Start(object sender, EventArgs e)
        {
            Session["updateinfo"] = new HPMUpdateInfo();
            var sessions = (List <HttpSessionState>)Application["sessions"];

            sessions.Add(Session);
        }
        private void UpdateProject(HPMUniqueID projectID)
        {
            var sessions = (List <HttpSessionState>)Application["sessions"];

            foreach (var session in sessions)
            {
                HPMUpdateInfo updateinfo = session["updateinfo"] as HPMUpdateInfo;
                updateinfo.UpdatedProjects.Add(projectID);
                updateinfo.FullUpdate = true;
            }
        }
        protected void HPM_ProjectDeleted(Object sender, ProjectDeleteEventArgs e)
        {
            var sessions = (List <HttpSessionState>)Application["sessions"];

            foreach (var session in sessions)
            {
                HPMUpdateInfo updateinfo = session["updateinfo"] as HPMUpdateInfo;
                updateinfo.DeletedProjects.Add(e.data.m_ProjectID);
                updateinfo.FullUpdate = true;
            }
        }
        protected void HPM_TaskDeleted(Object sender, TaskDeleteEventArgs e)
        {
            var sessions = (List <HttpSessionState>)Application["sessions"];

            foreach (var session in sessions)
            {
                HPMUpdateInfo updateinfo = session["updateinfo"] as HPMUpdateInfo;
                try
                {
                    updateinfo.DeletedTasks.Add(e.data.m_TaskID.m_ID, e.data.m_TaskID);
                }
                catch (ArgumentException)
                {
                }
            }
        }
        private void UpdateTask(HPMUniqueID taskID)
        {
            var sessions = (List <HttpSessionState>)Application["sessions"];

            foreach (var session in sessions)
            {
                HPMUpdateInfo updateinfo = session["updateinfo"] as HPMUpdateInfo;

                try
                {
                    updateinfo.UpdatedTasks.Add(taskID.m_ID, taskID);
                }
                catch (ArgumentException)
                {
                }
            }
        }
        protected void HPM_TasksCreated(Object sender, TasksCreateEventArgs e)
        {
            var sessions = (List <HttpSessionState>)Application["sessions"];

            foreach (var session in sessions)
            {
                HPMUpdateInfo updateinfo = session["updateinfo"] as HPMUpdateInfo;

                foreach (HPMChangeCallbackData_TaskCreateUnifiedTask createdTask in e.data.m_Tasks)
                {
                    try
                    {
                        updateinfo.CreatedTasks.Add(createdTask.m_TaskRefID.m_ID, createdTask.m_TaskRefID);
                    }
                    catch (ArgumentException)
                    {
                    }
                }
            }
        }
        /// <summary>
        /// Handles the tick event from the client side timer that updates the UpdatePanel. This is needed since we can't handle the callbacks in the server side code behind.
        /// </summary>
        protected void Timer_Tick(object sender, EventArgs args)
        {
            HPMUpdateInfo update = Session["updateinfo"] as HPMUpdateInfo;

            if (update.UpdatedTasks.Count > 0)
            {
                foreach (KeyValuePair<Int32, HPMUniqueID> keyValue in update.UpdatedTasks)
                {
                    HPMUniqueID taskID = keyValue.Value;
                    HPMUniqueID taskRefID = m_VirtSession.TaskGetMainReference(taskID);
                    if (update.CreatedTasks.ContainsKey(taskRefID.m_ID) || update.DeletedTasks.ContainsKey(taskRefID.m_ID))
                        continue;
                    HPMUniqueID projectID = m_VirtSession.TaskGetContainer(taskID);
                    string project = Convert.ToString(projectID.m_ID);
                    GridView gView = GetGridView(project);
                    DataTable dt = GetDataSource(project);
                    try
                    {
                        DataRow drow = dt.Rows.Find(taskID.m_ID);
                        List<HPMWIColumn> columns = GetColumns(project);
                        HPMUniqueID selectedID = new HPMUniqueID(-1);
                        if (gView.SelectedIndex != -1)
                        {
                            DataKey selectedKey = gView.SelectedDataKey;
                            selectedID = new HPMUniqueID(Convert.ToInt32(selectedKey.Value));
                        }
                        foreach (HPMWIColumn column in columns)
                        {
                            UpdateRow(taskID, projectID, column, drow, true);
                        }
                        if (selectedID == taskID)
                            MultilineTabsSetText(project, drow, true);
                        BindGrid(project, dt);
                    }
                    catch (MissingPrimaryKeyException)
                    {
                        SetErrorMessage("Task " + taskID + " does not exist in table.", "");
                    }
                }
            }
            if (update.DeletedTasks.Count > 0)
            {
                foreach (KeyValuePair<Int32, HPMUniqueID> keyValue in update.DeletedTasks)
                {
                    HPMUniqueID taskID = keyValue.Value;
                    HPMUniqueID projectID = m_VirtSession.TaskGetContainer(taskID);
                    string project = Convert.ToString(projectID.m_ID);
                    DataTable dt = GetDataSource(project);
                    try
                    {
                        DataRow drow = dt.Rows.Find(taskID.m_ID);
                        DeleteTask(taskID, drow);
                        BindGrid(project, dt);
                    }
                    catch (MissingPrimaryKeyException)
                    {
                        SetErrorMessage("Task " + taskID + " does not exist in table.", "");
                    }
                }
            }
            if (update.CreatedTasks.Count > 0)
            {

                foreach (KeyValuePair<Int32, HPMUniqueID> keyValue in update.CreatedTasks)
                {
                    HPMUniqueID taskRefID = keyValue.Value;
                    HPMUniqueID taskID = m_VirtSession.TaskRefGetTask(taskRefID);
                    HPMUniqueID projectID = m_VirtSession.TaskGetContainer(taskID);
                    string project = Convert.ToString(projectID.m_ID);
                    DataTable dt = GetDataSource(project);
                    AddTask(taskRefID, projectID, project, dt, false);
                    SetDataSource(dt, project);
                    BindGrid(project, dt);
                }

            }
            Session["updateinfo"] = new HPMUpdateInfo();
        }