2012-01-04 3 views
1

내가 얻으려고하는 것은 NeedDataSource 이벤트를 사용하여 데이터를 바인딩하는 RadGrid의 DropDownList, TextBox 및 CheckBox와 같은 컨트롤로 사용자 정의 필터를 사용하는 것입니다. 내 이전 시도에 무슨 짓을사용자 정의 필터가있는 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"; 
    } 

그 후 나는 루프는 앞서 언급 한 세션을 확인하는 경우에 사전 렌더링을 설정했다.

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

마지막으로해야 할 일은 재설정 버튼에 세션을 재설정하는 것입니다.하지만 그건 사소한 일입니다.

감사합니다,

흐르 보예