Пользовательские фильтры RadGrid теряют значения при обратной передаче - PullRequest
2 голосов
/ 17 января 2012

У меня проблема с фильтрацией Radgrid с использованием FilterTemplates. Я связываю значения в элементы управления внутри FilterTemplates внутри события ItemDataBound, и привязка работает отлично, за исключением того, что когда я нажимаю кнопку «Фильтр», я теряю свои значения.

Это код события ItemDataBound, в котором я привязываю значения к элементам управления:

protected void gvDaily_ItemDataBound(object sender, GridItemEventArgs e)
    {
        if (e.Item is GridFilteringItem)
        {
            GridFilteringItem filterItem = (GridFilteringItem)e.Item;
            RadComboBox rcbManagerDailyFilter = (RadComboBox)filterItem.FindControl("rcbManagerDailyFilter");
            RadComboBox rcbTvrtkaDailyFilter = (RadComboBox)filterItem.FindControl("rcbTvrtkaDailyFilter");
            RadComboBox rcbDolazakDailyFilter = (RadComboBox)filterItem.FindControl("rcbDolazakDailyFilter");

            rcbManagerDailyFilter.Items.Clear();
            rcbTvrtkaDailyFilter.Items.Clear();
            rcbDolazakDailyFilter.Items.Clear();

            rcbDolazakDailyFilter.Items.Add(new RadComboBoxItem("Odaberi vrstu", "0"));
            rcbDolazakDailyFilter.Items.Add(new RadComboBoxItem("Rad", "1"));
            rcbDolazakDailyFilter.Items.Add(new RadComboBoxItem("Dolazak", "2"));
            rcbDolazakDailyFilter.Items.Add(new RadComboBoxItem("Sve", "3"));

            var kontaktiList = (from k in db.Kontakt
                                select k).ToList();

            var kontaktiM = from k in kontaktiList
                            orderby k.Prezime, k.Ime
                            where k.Firma.Naziv == "IDE3"
                            select new { k.idKontakt, Osoba = k.Ime + " " + k.Prezime };


            rcbManagerDailyFilter.Items.Add(new RadComboBoxItem("Odaberi managera", "0"));
            rcbManagerDailyFilter.DataSource = kontaktiM;
            rcbManagerDailyFilter.DataValueField = "Osoba";
            rcbManagerDailyFilter.DataTextField = "Osoba";
            rcbManagerDailyFilter.DataBind();

            var tvrtkaList = from t in db.Firma
                             orderby t.Naziv
                             select new { t.idFirma, t.Naziv };

            rcbTvrtkaDailyFilter.Items.Add(new RadComboBoxItem("Odaberi tvrtku", "0"));
            rcbTvrtkaDailyFilter.DataSource = tvrtkaList;
            rcbTvrtkaDailyFilter.DataValueField = "Naziv";
            rcbTvrtkaDailyFilter.DataTextField = "Naziv";
            rcbTvrtkaDailyFilter.DataBind();
        }
    }

Следующий код является событием щелчка, которое фильтрует RadGrid:

 protected void btnTrazi_Click(object sender, EventArgs e)
    {
        GridFilteringItem item = gvDaily.MasterTableView.GetItems(GridItemType.FilteringItem)[0] as GridFilteringItem;

        RadComboBox rcbManagerDailyFilter = (RadComboBox)item.FindControl("rcbManagerDailyFilter");
        RadComboBox rcbTvrtkaDailyFilter = (RadComboBox)item.FindControl("rcbTvrtkaDailyFilter");
        RadDatePicker txtDatumPrijaveDailyOdFilter = (RadDatePicker)item.FindControl("txtDatumPrijaveDailyOdFilter");
        RadDatePicker txtDatumPrijaveDailyDoFilter = (RadDatePicker)item.FindControl("txtDatumPrijaveDailyDoFilter");
        RadioButtonList rblDolazakFilter = (RadioButtonList)item.FindControl("rblDolazakFilter");

        string tvrtka = rcbTvrtkaDailyFilter.SelectedItem.Text;
        string manager = rcbManagerDailyFilter.SelectedItem.Text;
        string datumPrijaveOd = (txtDatumPrijaveDailyOdFilter.SelectedDate).ToString();
        string datumPrijaveDo = (txtDatumPrijaveDailyDoFilter.SelectedDate).ToString();


        string expression = "";

        if (tvrtka  != "Odaberi tvrtku")
        {
            expression += "([Tvrtka] = '" + tvrtka + "')";
        }

        if (manager != "Odaberi managera")
        {
            expression += " AND ";
            expression += "([DailyManager] = '" + manager + "')";
        }

        if (datumPrijaveOd.Length != 0)
        {
            expression += " AND ";
            expression += "([Datum] >= '" + datumPrijaveOd + "')";
        }

        if (datumPrijaveDo.Length != 0)
        {
            expression += " AND ";
            expression += "([Datum] <= '" + datumPrijaveDo + "')";
        }


        gvDaily.MasterTableView.FilterExpression = expression;
        gvDaily.Rebind();
    }
}

Мне нужна помощь о том, как исправить потерянные значения в элементах управления после нажатия кнопки фильтра, которая вызывает обратную передачу.

С уважением,

Hrvoje

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...