2016-04-14 27 views
1

Sayfalama çağrısı yapıldığında, GridView öğesini tıklama başlığına göre sıralamaya çalışıyorum.GridView asp.net sıralaması

Kılavuzun içeriği nasıl alınır?

GridView.Rows, yalnızca seçili sayfada satırlar verir.

Veritabanı'ndan başka bir seçim yapmak ve sipariş etmek istemiyorum. Ve ayrıca, SessionState içine kaydetmek istemiyorum.

'default' SortExpression'un neye benzediğini anlayamıyorum.

Bu SortExpression, DESC veya ASC'yi ID ile sipariş edecek, ancak bazı özel sıralama nasıl yapılır? Ya da başka bir türe göre sıralamak için?

ValueFromIncluded

göre sıralamak için nasıl
//example 
    <asp:GridView runat="server" 
        ID="GridID" 
        SelectMethod="GridView_GetData" 
        ItemType="ItemType"   
        AllowPaging="true">   
        <Columns> 
         <asp:TemplateField HeaderText="Id" SortExpression="Id"> 
          <ItemTemplate> 
           <asp:Label runat="server" Text='<%# Item?.Id%>'/> 
          </ItemTemplate> 
         </asp:TemplateField> 
asp:TemplateField HeaderText="ValueFromIncluded" SortExpression="ValueFromIncluded"> 
          <ItemTemplate> 
           <asp:Label runat="server" Text='<%# Item?.ValueFromIncluded.SomeOtherId%>'/> 
          </ItemTemplate> 
         </asp:TemplateField> 
      </Columns> 
      </asp:GridView> 
      // SelectMethod. 
      public IQueryable<ItemType> GridView_GetData() 
       {   
        IQueryable<ItemType> q = dbx.ItemType    
         .Include(f => f.OtherType); 
      } 
+0

Veritabanı katmanının sıralama ve sayfalama yapmasına izin vermenizi öneririm. – Agalo

+0

Ama ben daha büyük GridView_GetData() Ben sadece benim özel sıralama geçmek istiyorum sonuçları var. Ama ben hata alıyorum 'Özel TypeInSourceExpression' özelliği 'ItemType' türü için tanımlanmadı Ofcourse DB halledelim, sadece nasıl oreder söylemek istiyorum. – 1392023093user

+0

'SortExpression' seçeneğine' switch case 'koymalı ve 'ItemType' öğesinin spesifik özelliği üzerinde' OrderBy 'öğesini çağırın. – Agalo

cevap

1

Ee, ne yapmanız gereken başka bir sınıf yapmak ve Izgara bunu kullanmaktır.

public class ItemTypeForGrid: ItemType 
     { 
      public string ValueFromIncluded{ get; internal set; } 

     } 

Yani kod

<asp:GridView runat="server" 
     ID="GridID" 
     SelectMethod="GridView_GetData" 
     ItemType="ItemType+ItemTypeForGrid"   
     AllowPaging="true">   
    <Columns> 
      <asp:TemplateField HeaderText="Id" SortExpression="Id"> 
            <ItemTemplate> 
             <asp:Label runat="server" Text='<%# Item?.Id%>'/> 
            </ItemTemplate> 
           </asp:TemplateField> 
     asp:TemplateField HeaderText="ValueFromIncluded" SortExpression="ValueFromIncluded"> 
            <ItemTemplate> 
             <asp:Label runat="server" Text='<%# Item?.ValueFromIncluded.SomeOtherId%>'/> 
            </ItemTemplate> 
           </asp:TemplateField> 
        </Columns> 
        </asp:GridView> 

// SelectMethod benzeyecek yeni sınıf ItemTypeForGrid oluşturun ve aspx sayfası ItemType = "ItemType + ItemTypeForGrid" konulu.

public IQueryable<ItemTypeForGrid> GridView_GetData() 
    {   
    IQueryable<ItemType> q = context.ItemType    
        .Include(f => f.OtherType); 
    // AND HERE SELECT WHAT YOU NEED IN GRID 
    var qForGrid = q.Select(s=> new ItemTypeForGrid(){ 
        ValueFromIncluded = r.ItemType.OtherType }); 
    } 

Bu şekilde sıralayabilirsiniz! Ancak daha önemli olan şey, GridView'de sadece görünmesi gerekenleri, tüm tabloların tüm özelliklerinden değil, seçmesidir.