QueryExtender (Sorgu Genişletici) Kontrolü

Eyl 06, 2013

QueryExtender (Sorgu Genişletici) verilerin ASP.NET tarafında filtrelenmesine sağlayan bir kontroldür. Verilerin kaynaktan çekilmeden değil, çekildikten sonra filtrelenmesi için kullanılır. QueryExtender kontrolü, işe yaramayan veriler de okunduğu için uygulamayı yavaşlatacak gibi gözükebilir ancak veri tabanıyla yapılan alışverişi azalttığından uygulama performansını artı yönde etkilemektedir. QueryExtender sadece ASP.NET DataSource (Veri Kaynağı) üzerinde sorgulama yapabilmektedir. Aynı DataSource üzerinde birden fazla QueryExtender sorgusu yapılabilmekte, bu sorguların hangisinin yapılacağına çalışma zamanında karar verilebilmektedir. QueryExtender ile yapılabilecek sorgulama çeşitleri aşağıdaki gibidir:

  • ControlFilterExpression (Kontrol Filtreleme İfadesi): Sadece dinamik veriler için GridView (Izgara Görünümü) ve ListView (Liste Görünümü) üzerinde filtreleme işlemi yapılmasını sağlar.
  • CustomExpression (Özel İfade): LINQ (Language Integrated Query - Dil Entegre Edilmiş Sorgu) sorguları üzerinde filtreleme işlemi yapar.
  • DynamicFilterExpression (Dinamik Filtreleme İfadesi): ASP.NET Dynamic Data (Dinamik Veri) Web sitelerinde filtreleme yapmak için kullanılır.
  • MethodExpression (Metod İfadesi): Bir LINQ sorgusu üzerinde arama işlemi yapmaya yarar.
  • OrderByExpression (Sıralama İfadesi): Sıralama işlemleri için kullanılır.
  • PropertyExpression (Özellik İfadesi): Karşılaştırma ve doğrulama işlemleri yapar.
  • RangeExpression (Aralık İfadesi): Değerin karşılaştırlan değerden büyük olup olmadığını veya iki değer arasında olup olmadığını sorgulamak için kullanılır.
  • SearchExpression (Arama İfadesi): Veri alanları içinde belirli karakter katarlarını aramak için kullanılır. StartsWith (Başlayan), Contains (İçeren) ve EndsWith (Biten) şeklinde üç farklı arama seçeneği vardır.

Uygulama

Bu uygulamada, veri tabanındaki "Kisi" tablosundan alınan bilgiler "ad" ve "soyad" alanlarına göre filtrelenmektedir. Kisi tablosunun yapısı aşağıdaki gibidir:

Verileri GridView üzerinde listeleyen ve isme göre ya da yaşa göre arama yapan sayfanın kodları aşağıdaki gibidir: 

<asp:TextBox ID="tbSearch" runat="server" ></asp:TextBox>
<asp:Button ID="btIsimAra" runat="server" Text="İsme Göre" OnClick="VeriTuru" />
     <br />      
<asp:TextBox ID="tbMin" runat="server"></asp:TextBox>        
<asp:TextBox ID="tbMax" runat="server"></asp:TextBox>
<asp:Button ID="btYasAra" runat="server" Text="Yaşa Göre" OnClick="VeriTuru" />
    <br />
<asp:EntityDataSource ID="dsKisi" runat="server" ConnectionString="name=KisiEntities"
    DefaultContainerName="KisiEntities" EnableFlattening="False" EntitySetName="Person"
    EntityTypeFilter="Person">
</asp:EntityDataSource> 
<asp:QueryExtender ID="qeKisi" runat="server" TargetControlID="dsKisi">
    <asp:SearchExpression SearchType="Contains" DataFields="soyad,ad">
        <asp:ControlParameter ControlID="tbSearch" />
    </asp:SearchExpression>           
</asp:QueryExtender>

<asp:GridView ID="gvKisi" runat="server" AutoGenerateColumns="false" DataSourceID="dsKisi" AllowPaging="true">
    <Columns>
        <asp:TemplateField HeaderText="Ad">
            <ItemTemplate>
                <%# Eval("ad") %>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Soyad">
            <ItemTemplate>
                <%# Eval("soyad") %>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Şehir">
            <ItemTemplate>
                <%# Eval("sehir") %>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Yaş">
            <ItemTemplate>
                <%# Eval("yas") %>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

Uygulama çalıştırıldığında aşağıdaki gibi bir ekran çıktısı üretmektedir:

Yukarıdaki örnekteki GridView listesini isim yerine belirlenen yaş aralığına göre filtreleyen QueryExtender kontrolü aşağıdaki gibidir:

<asp:QueryExtender ID="qeKisi" runat="server" TargetControlID="dsKisi2">
    <asp:RangeExpression DataField="yas" MaxType="Inclusive" MinType="Inclusive">
        <asp:ControlParameter ControlID="tbMin" />
        <asp:ControlParameter ControlID="tbMax" />
    </asp:RangeExpression>
    <asp:OrderByExpression DataField="yas"></asp:OrderByExpression>
</asp:QueryExtender>

QueryExtender kontolü değiştirilip uygulama tekrar çalıştırıldığında aşağıdaki ekran çıktısını üretmektedir: