RadGrid自定义过滤器

RadGrid自定义过滤器

问题描述:

我想要实现的是使用RadGrid上的DropDownList,TextBox和CheckBox等控件的自定义过滤器,它使用NeedDataSource事件来绑定数据。RadGrid自定义过滤器

我在以前的尝试没有什么是这样的:

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,然后调用之前选择的行的索引。

我的问题是如何解决这个问题或者有什么选择?

谢谢!

问候,

赫尔沃耶

好吧,我已经找到了解决方案!

我所做的是使用会话,这将有助于我们稍后确定过滤后的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(); 
     } 
    } 

我不得不做的最后一件事是重置复位按钮会话,但这是微不足道的。

问候,

赫尔沃耶