2012-01-04 333 views
1

我想要實現的是使用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,然後調用之前選擇的行的索引。

我的問題是如何解決這個問題或者有什麼選擇?

謝謝!

問候,

赫爾沃耶

回答

0

好吧,我已經找到了解決方案!

我所做的是使用會話,這將有助於我們稍後確定過濾後的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(); 
     } 
    } 

我不得不做的最後一件事是重置復位按鈕會話,但這是微不足道的。

問候,

赫爾沃耶