首页 文章

RadGrid带有自定义过滤器

提问于
浏览
1

我想要实现的是使用自定义过滤器与RadGrid上的DropDownList,TextBox和CheckBox之类的控件,它们使用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();
    }

提到的代码的问题是,每当我尝试单击“Detalji”(实际上是标准的“编辑”按钮)时,会选择错误的记录 . 我认为问题出现在编辑按钮中,正如我所认为的那样,导致NeedDataSource事件被触发的回发并加载默认的DataSource,然后调用先前选择的行的索引 .

我的问题是如何解决这个问题或者替代方案是什么?

谢谢!

问候,

赫尔沃耶

1 回答

  • 0

    好的,我找到了解决方案!

    我所做的是使用Session,这将帮助我们稍后确定过滤后的RadGrid数据源是否已启动或是否为默认值 .

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

    之后我不得不使用if循环设置PreRender以检查之前提到的Session .

    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();
            }
        }
    

    我要做的最后一件事是重置按钮重置按钮,但这是微不足道的 .

    问候,

    赫尔沃耶

相关问题