RadGrid с пользовательскими фильтрами - PullRequest
1 голос
/ 04 января 2012

То, чего я пытаюсь добиться, - это использовать пользовательские фильтры с такими элементами управления, как DropDownList, TextBox и CheckBox в RadGrid, который использует событие NeedDataSource для привязки данных.

То, что я сделал в моей предыдущей попытке, было примерно таким:

enter image description here

Фильтр работает нормально и использует следующий код для фильтрации RadGrid:

protected void btnSearch_Click(object sender, EventArgs e)
    {
        var kontakti = from k in db.Kontakt
                       select k;

        int idTipUsera = Convert.ToInt32(rcbTipUsera.SelectedValue);
        int idTvrtka = Convert.ToInt32(rcbTvrtka.SelectedValue);

        if (rcbTvrtka.SelectedValue != "0")
        {
            kontakti = kontakti.Where(k => k.idFirma == idTvrtka);
        }

        if (rcbTipUsera.SelectedValue != "0")
        {
            kontakti = kontakti.Where(k => k.idOvlasti == idTipUsera);
        }

        if (chkAktivan.Checked == true)
        {
            kontakti = kontakti.Where(k => k.Aktivan == true);
        }
        else
        {
            kontakti = kontakti.Where(k => k.Aktivan == false);
        }

        int idKontakt = Convert.ToInt32(Request.QueryString["idk"]);
        int idAuthKontakt = Convert.ToInt32(Session["authenticatedUI"]);

        if (idKontakt > 0 && idAuthKontakt == idKontakt)
        {
            gvKontakti.DataSource = from k in kontakti
                                    where k.idKontakt == idKontakt
                                    orderby k.Prezime, k.Ime
                                    select new { Tvrtka = k.Firma.Naziv, k.idKontakt, Naziv = k.Ime + " " + k.Prezime, Funkcija = k.Funkcija, k.Ime, k.Prezime, k.Tel1, k.Tel2, k.Mob1, k.Mob2, k.Email1, k.Email2, k.Fax, k.Adresa1, k.Adresa2, k.Adresa3, k.Grad, k.PostanskiBroj, k.Drzava, k.Biljeske, k.Aktivan, k.Username, k.Password };
        }
        else if (idKontakt > 0 && idAuthKontakt != idKontakt)
        {
            gvKontakti.DataSource = from k in kontakti
                                    where k.idKontakt == idKontakt
                                    orderby k.Prezime, k.Ime
                                    select new { Tvrtka = k.Firma.Naziv, k.idKontakt, Naziv = k.Ime + " " + k.Prezime, Funkcija = k.Funkcija, k.Ime, k.Prezime, k.Tel1, k.Tel2, k.Mob1, k.Mob2, k.Email1, k.Email2, k.Fax, k.Adresa1, k.Adresa2, k.Adresa3, k.Grad, k.PostanskiBroj, k.Drzava, k.Biljeske, k.Aktivan, k.Username, k.Password };
        }
        else
        {
            gvKontakti.DataSource = from k in kontakti
                                    orderby k.Prezime, k.Ime
                                    select new { Tvrtka = k.Firma.Naziv, k.idKontakt, Naziv = k.Ime + " " + k.Prezime, Funkcija = k.Funkcija, k.Ime, k.Prezime, k.Tel1, k.Tel2, k.Mob1, k.Mob2, k.Email1, k.Email2, k.Fax, k.Adresa1, k.Adresa2, k.Adresa3, k.Grad, k.PostanskiBroj, k.Drzava, k.Biljeske, k.Aktivan, k.Username, k.Password };
        }

        gvKontakti.DataBind();
    }

Проблема с упомянутым кодом заключается в том, что всякий раз, когда я пытаюсь нажать «Детальджи» (которая на самом деле является стандартной кнопкой «Изменить»), выбирается неправильная запись. Я предполагаю, что проблема заключается в кнопке «Изменить», которая, как я полагаю, выполняет обратную передачу, которая вызывает событие NeedDataSource и запускает стандартный источник данных, который затем вызывает индекс ранее выбранной строки.

У меня вопрос, как это исправить или какая альтернатива?

Спасибо!

С уважением,

Hrvoje

1 Ответ

0 голосов
/ 04 января 2012

Хорошо, я нашел решение!

Я использовал сессию, которая поможет нам позже определить, был ли инициирован отфильтрованный источник данных RadGrid или он был по умолчанию.

    protected void btnSearch_Click(object sender, EventArgs e)
    {
        Session["SearchKontakti"] = "1";
    }

После этого мне пришлось установить в PreRender цикл if для проверки ранее упомянутой сессии.

protected void gvKontakti_PreRender(object sender, EventArgs e)
    {
        int idKontakt = Convert.ToInt32(Request.QueryString["idk"]);

        if (Session["SearchKontakti"] == "1")
        {
            var kontakti = from k in db.Kontakt
                           select k;

            int idTipUsera = Convert.ToInt32(rcbTipUsera.SelectedValue);
            int idTvrtka = Convert.ToInt32(rcbTvrtka.SelectedValue);

            if (rcbTvrtka.SelectedValue != "0")
            {
                kontakti = kontakti.Where(k => k.idFirma == idTvrtka);
            }

            if (rcbTipUsera.SelectedValue != "0")
            {
                kontakti = kontakti.Where(k => k.idOvlasti == idTipUsera);
            }

            if (chkAktivan.Checked == true)
            {
                kontakti = kontakti.Where(k => k.Aktivan == true);
            }
            else
            {
                kontakti = kontakti.Where(k => k.Aktivan == false);
            }

            int idAuthKontakt = Convert.ToInt32(Session["authenticatedUI"]);

            if (idKontakt > 0 && idAuthKontakt == idKontakt)
            {
                gvKontakti.DataSource = from k in kontakti
                                        where k.idKontakt == idKontakt
                                        orderby k.Prezime, k.Ime
                                        select new { Tvrtka = k.Firma.Naziv, k.idKontakt, Naziv = k.Ime + " " + k.Prezime, Funkcija = k.Funkcija, k.Ime, k.Prezime, k.Tel1, k.Tel2, k.Mob1, k.Mob2, k.Email1, k.Email2, k.Fax, k.Adresa1, k.Adresa2, k.Adresa3, k.Grad, k.PostanskiBroj, k.Drzava, k.Biljeske, k.Aktivan, k.Username, k.Password };
            }
            else if (idKontakt > 0 && idAuthKontakt != idKontakt)
            {
                gvKontakti.DataSource = from k in kontakti
                                        where k.idKontakt == idKontakt
                                        orderby k.Prezime, k.Ime
                                        select new { Tvrtka = k.Firma.Naziv, k.idKontakt, Naziv = k.Ime + " " + k.Prezime, Funkcija = k.Funkcija, k.Ime, k.Prezime, k.Tel1, k.Tel2, k.Mob1, k.Mob2, k.Email1, k.Email2, k.Fax, k.Adresa1, k.Adresa2, k.Adresa3, k.Grad, k.PostanskiBroj, k.Drzava, k.Biljeske, k.Aktivan, k.Username, k.Password };
            }
            else
            {
                gvKontakti.DataSource = from k in kontakti
                                        orderby k.Prezime, k.Ime
                                        select new { Tvrtka = k.Firma.Naziv, k.idKontakt, Naziv = k.Ime + " " + k.Prezime, Funkcija = k.Funkcija, k.Ime, k.Prezime, k.Tel1, k.Tel2, k.Mob1, k.Mob2, k.Email1, k.Email2, k.Fax, k.Adresa1, k.Adresa2, k.Adresa3, k.Grad, k.PostanskiBroj, k.Drzava, k.Biljeske, k.Aktivan, k.Username, k.Password };
            }

            gvKontakti.DataBind();
        }
    }

Последнее, что мне нужно было сделать, - сбросить кнопку «Сессия при перезагрузке», но это тривиально.

С уважением,

Hrvoje

...