private void SaveAllAvdelinger()
        {
            var allAvdelinger = UpdateDataSource();

            if (allAvdelinger.Any(avdeling => avdeling.IsChanged))
            {
                foreach (var avdeling in allAvdelinger)
                {
                    if (avdeling.IsChanged)
                    {
                        avdeling.Save();
                    }
                }

                allAvdelinger = Avdeling.GetAll().ToList();

                UpdateBinding(allAvdelinger, sort: true);
            }
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            if (IsPostBack == false)
            {
                ViewState["dummyId"] = 0;

                if (Session["AvdelingList - hidedColumns"] == null)
                {
                    Session["AvdelingList - hidedColumns"] = new Dictionary <string, string>();
                }

                IList <Avdeling> allAvdelinger = Avdeling.GetAll().ToList();

                Session["AvdelingList - SortDirection"]  = Session["AvdelingList - SortDirection"] ?? SortDirection.Ascending;
                Session["AvdelingList - SortExpression"] = Session["AvdelingList - SortExpression"] ?? "Navn";

                UpdateBinding(allAvdelinger, sort: true);
            }
        }
        private void BindToListView(IList <Klasse> allKlasser)
        {
            var avdelinger = Avdeling.GetAll().OrderBy(a => a.Navn).ToList();
            var elever     = Elev.GetAll().OrderBy(e => e.Navn).ToList();
            var ansatte    = Ansatt.GetAll().OrderBy(a => a.Navn).ToList();

            var klasseViewList = new List <object>();

            foreach (var klasse in allKlasser)
            {
                klasseViewList.Add(new
                {
                    klasse.Id,
                    klasse.Navn,
                    klasse.MaksAntallElever
                });
            }

            KlasseListView.DataSource = klasseViewList;
            KlasseListView.DataBind();

            foreach (var item in KlasseListView.Items)
            {
                if (item.ItemType == ListViewItemType.DataItem)
                {
                    var idButton = (Button)item.FindControl("IdButton");

                    var avdelingDropDown = (DropDownList)item.FindControl("AvdelingDropDown");

                    var klasse = allKlasser.First(k => k.Id.ToString() == idButton.Text);

                    avdelingDropDown.DataSource     = avdelinger;
                    avdelingDropDown.DataValueField = Utilities.GetPropertyName(() => klasse.Avdeling.Id);
                    avdelingDropDown.DataTextField  = Utilities.GetPropertyName(() => klasse.Avdeling.Navn);
                    avdelingDropDown.DataBind();

                    if (klasse.Avdeling != null)
                    {
                        avdelingDropDown.SelectedValue = klasse.Avdeling.Id.ToString();
                    }

                    var eleverListBox      = (ListControl)item.FindControl("EleverListBox");
                    var elevTeller         = 0;
                    var elevSelectedTeller = 0;
                    foreach (var elev in elever)
                    {
                        var listItem = new ListItem(elev.Navn, elev.Id.ToString());

                        if (klasse.Elevs.Any(e => e.Id == elev.Id))
                        {
                            listItem.Selected = true;
                            listItem.Enabled  = false;
                        }

                        if (listItem.Selected)
                        {
                            eleverListBox.Items.Insert(elevSelectedTeller++, listItem);
                            elevTeller++;
                        }
                        else
                        {
                            eleverListBox.Items.Insert(elevTeller++, listItem);
                        }
                    }

                    var ansatteListBox       = (ListControl)item.FindControl("AnsatteListBox");
                    var ansattTeller         = 0;
                    var ansattSelectedTeller = 0;
                    foreach (var ansatt in ansatte)
                    {
                        var listItem = new ListItem(ansatt.Navn, ansatt.Id.ToString());

                        if (klasse.Ansatts.Any(a => a.Id == ansatt.Id))
                        {
                            listItem.Selected = true;
                        }

                        if (listItem.Selected)
                        {
                            ansatteListBox.Items.Insert(ansattSelectedTeller++, listItem);
                            ansattTeller++;
                        }
                        else
                        {
                            ansatteListBox.Items.Insert(ansattTeller++, listItem);
                        }
                    }

                    if (klasse.Elevs.Count > 0)
                    {
                        var deleteLinkButton = (LinkButton)item.FindControl("DeleteLinkButton");
                        WebUtilities.DisableLinkButton(deleteLinkButton, @"Alle elever må overføres til andre klasser før klasse '" + klasse.Navn + "' kan slettes.");
                    }
                }
            }
        }
        private void UpdateBinding(Ansatt ansatt)
        {
            Session["currentAnsatt"] = ansatt;

            var avdelinger     = Avdeling.GetAll().OrderBy(a => a.Navn).ToList();
            var stillingsTyper = StillingsType.GetAll().OrderBy(s => s.Navn).ToList();
            var klasser        = Klasse.GetAll().OrderBy(k => k.Navn).ToList();
            var sfos           = Sfo.GetAll().OrderBy(s => s.Navn).ToList();

            IdTextBox.Text   = ansatt.Id.ToString();
            NavnTextBox.Text = ansatt.Navn;
            StillingsStørrelseTextBox.Text = ansatt.Stillingsstørrelse.ToString();
            TlfNrTextBox.Text = ansatt.Tlfnr;

            TimerPrUkeTextBox.Text = ansatt.TimerPrUke().ToString("N2");

            DiffTimerTextBox.Text = ansatt.DiffTimer().ToString("N2");

            AvdelingDropDown.DataSource     = avdelinger;
            AvdelingDropDown.DataValueField = Utilities.GetPropertyName(() => ansatt.Avdeling.Id);
            AvdelingDropDown.DataTextField  = Utilities.GetPropertyName(() => ansatt.Avdeling.Navn);
            AvdelingDropDown.DataBind();

            if (ansatt.Avdeling != null)
            {
                AvdelingDropDown.SelectedValue = ansatt.Avdeling.Id.ToString();
            }

            StillingsTypeDropDown.DataSource     = stillingsTyper;
            StillingsTypeDropDown.DataValueField = Utilities.GetPropertyName(() => ansatt.StillingsType.Id);
            StillingsTypeDropDown.DataTextField  = Utilities.GetPropertyName(() => ansatt.StillingsType.Navn);
            StillingsTypeDropDown.DataBind();

            if (ansatt.StillingsType != null)
            {
                StillingsTypeDropDown.SelectedValue = ansatt.StillingsType.Id.ToString();
            }

            var klasseTeller         = 0;
            var klasseSelectedTeller = 0;

            JobberIKlasserListBox.Items.Clear();

            foreach (var klasse in klasser)
            {
                var listItem = new ListItem(klasse.Navn, klasse.Id.ToString());

                if (ansatt.JobberIKlasser.Any(k => k.Id == klasse.Id))
                {
                    listItem.Selected = true;
                }

                if (listItem.Selected)
                {
                    JobberIKlasserListBox.Items.Insert(klasseSelectedTeller++, listItem);
                    klasseTeller++;
                }
                else
                {
                    JobberIKlasserListBox.Items.Insert(klasseTeller++, listItem);
                }
            }

            var sfoTeller         = 0;
            var sfoSelectedTeller = 0;

            JobberISfosListBox.Items.Clear();

            foreach (var sfo in sfos)
            {
                var listItem = new ListItem(sfo.Navn, sfo.Id.ToString());

                if (ansatt.JobberISfos.Any(s => s.Id == sfo.Id))
                {
                    listItem.Selected = true;
                }

                if (listItem.Selected)
                {
                    JobberISfosListBox.Items.Insert(sfoSelectedTeller++, listItem);
                    sfoTeller++;
                }
                else
                {
                    JobberISfosListBox.Items.Insert(sfoTeller++, listItem);
                }
            }

            BindToListView(ansatt);
        }
        protected void CancelButton_Click(object sender, EventArgs e)
        {
            var allAvdelinger = Avdeling.GetAll().ToList();

            UpdateBinding(allAvdelinger, sort: true);
        }
        private void BindToListView(IList <Ansatt> allAnsatte)
        {
            //Stopwatch stopwatch = new Stopwatch();
            //stopwatch.Start();

            var avdelinger     = Avdeling.GetAll().OrderBy(a => a.Navn).ToList();
            var stillingsTyper = StillingsType.GetAll().OrderBy(s => s.Navn).ToList();
            var klasser        = Klasse.GetAll().OrderBy(k => k.Navn).ToList();
            var sfos           = Sfo.GetAll().OrderBy(s => s.Navn).ToList();

            var ansattViewList = new List <object>();

            foreach (var ansatt in allAnsatte)
            {
                ansattViewList.Add(new
                {
                    ansatt.Id,
                    ansatt.Navn,
                    ansatt.Stillingsstørrelse,
                    ansatt.Tlfnr
                });
            }

            AnsattListView.DataSource = ansattViewList;
            AnsattListView.DataBind();

            foreach (var item in AnsattListView.Items)
            {
                if (item.ItemType == ListViewItemType.DataItem)
                {
                    var idButton = (Button)item.FindControl("IdButton");

                    var avdelingDropDown = (DropDownList)item.FindControl("AvdelingDropDown");

                    var ansatt = allAnsatte.First(a => a.Id.ToString() == idButton.Text);

                    avdelingDropDown.DataSource     = avdelinger;
                    avdelingDropDown.DataValueField = Utilities.GetPropertyName(() => ansatt.Avdeling.Id);
                    avdelingDropDown.DataTextField  = Utilities.GetPropertyName(() => ansatt.Avdeling.Navn);
                    avdelingDropDown.DataBind();

                    if (ansatt.Avdeling != null)
                    {
                        avdelingDropDown.SelectedValue = ansatt.Avdeling.Id.ToString();
                    }

                    var stillingsTypeDropDown = (DropDownList)item.FindControl("StillingsTypeDropDown");
                    stillingsTypeDropDown.DataSource     = stillingsTyper;
                    stillingsTypeDropDown.DataValueField = Utilities.GetPropertyName(() => ansatt.StillingsType.Id);
                    stillingsTypeDropDown.DataTextField  = Utilities.GetPropertyName(() => ansatt.StillingsType.Navn);
                    stillingsTypeDropDown.DataBind();

                    if (ansatt.StillingsType != null)
                    {
                        stillingsTypeDropDown.SelectedValue = ansatt.StillingsType.Id.ToString();
                    }

                    var jobberIKlasserListBox = (ListControl)item.FindControl("JobberIKlasserListBox");
                    jobberIKlasserListBox.Items.Clear();

                    var klasseTeller         = 0;
                    var klasseSelectedTeller = 0;
                    foreach (var klasse in klasser)
                    {
                        var listItem = new ListItem(klasse.Navn, klasse.Id.ToString());

                        if (ansatt.JobberIKlasser.Any(k => k.Id == klasse.Id))
                        {
                            listItem.Selected = true;
                        }

                        if (listItem.Selected)
                        {
                            jobberIKlasserListBox.Items.Insert(klasseSelectedTeller++, listItem);
                            klasseTeller++;
                        }
                        else
                        {
                            jobberIKlasserListBox.Items.Insert(klasseTeller++, listItem);
                        }
                    }

                    var jobberISfosListBox = (ListControl)item.FindControl("JobberISfosListBox");
                    jobberISfosListBox.Items.Clear();

                    var sfoTeller         = 0;
                    var sfoSelectedTeller = 0;
                    foreach (var sfo in sfos)
                    {
                        var listItem = new ListItem(sfo.Navn, sfo.Id.ToString());

                        if (ansatt.JobberISfos.Any(s => s.Id == sfo.Id))
                        {
                            listItem.Selected = true;
                        }

                        if (listItem.Selected)
                        {
                            jobberISfosListBox.Items.Insert(sfoSelectedTeller++, listItem);
                            sfoTeller++;
                        }
                        else
                        {
                            jobberISfosListBox.Items.Insert(sfoTeller++, listItem);
                        }
                    }

                    var avdelingsLederIAvdelinger = ansatt.AvdelingsLederIAvdelinger.Count > 0;
                    var hovedPedagogForElever     = ansatt.HovedPedagogForElever.Count > 0;

                    if (avdelingsLederIAvdelinger || hovedPedagogForElever)
                    {
                        string message;

                        if (avdelingsLederIAvdelinger)
                        {
                            message = @"Avdelinger hvor '" + ansatt.Navn + "' er avdelingsleder må tilordnes annen avdelingsleder før '" + ansatt.Navn + "' kan slettes.";
                        }
                        else
                        {
                            message = @"Elever som har '" + ansatt.Navn + "' som hovedpedagog må tilordnes annen hovedpedagog før '" + ansatt.Navn + "' kan slettes.";
                        }

                        var deleteLinkButton = (LinkButton)item.FindControl("DeleteLinkButton");
                        WebUtilities.DisableLinkButton(deleteLinkButton, message);
                    }

                    //var avdelingsLederIAvdelingerListBox = (ListBox)item.FindControl("AvdelingsLederIAvdelingerListBox");
                    //var avdelingTeller = 0;
                    //foreach (var avdeling in avdelinger)
                    //{
                    //    var listItem = new ListItem(avdeling.Navn, avdeling.Id.ToString());

                    //    if (ansatt.AvdelingsLederIAvdelinger.Any(a => a.Id == avdeling.Id))
                    //    {
                    //        listItem.Selected = true;
                    //    }

                    //    avdelingsLederIAvdelingerListBox.Items.Insert(avdelingTeller++, listItem);
                    //}

                    //var yearsDropDownCheckBoxes = (DropDownCheckBoxes)item.FindControl("DropDownCheckBoxes1");
                    //var klasseTeller1 = 0;
                    //foreach (var klasse in klasser)
                    //{
                    //    var listItem = new ListItem(klasse.Navn, klasse.Id.ToString());

                    //    if (ansatt.JobberIKlasser.Any(k => k.Id == klasse.Id))
                    //    {
                    //        listItem.Selected = true;
                    //    }

                    //    yearsDropDownCheckBoxes.Items.Insert(klasseTeller1++, listItem);
                    //}

                    //yearsDropDownCheckBoxes.CssClass = "form-control";

                    //var varslesAvAnsattDropDown = (DropDownList)item.FindControl("VarslesAvAnsattDropDown");
                    //varslesAvAnsattDropDown.DataSource = ansatte;
                    //varslesAvAnsattDropDown.DataValueField = Utilities.GetPropertyName(() => ansatt.VarslesAvAnsatt.Id);
                    //varslesAvAnsattDropDown.DataTextField = Utilities.GetPropertyName(() => ansatt.VarslesAvAnsatt.Navn);
                    //varslesAvAnsattDropDown.DataBind();

                    //// Default value
                    //varslesAvAnsattDropDown.Items.Insert(0, new ListItem("Velg varsling", "0"));
                    //varslesAvAnsattDropDown.SelectedValue = ansatt.VarslesAvAnsatt != null ? ansatt.VarslesAvAnsatt.Id.ToString() : "0";
                }
            }
            //stopwatch.Stop();
        }