C#

2010-11-21 14 views
0

kullanarak ASP.NET 2.0 DataView tarafından doldurulan bir GridView sıralama açılamıyor Bir InterBase veritabanı kullanarak bir ASP.NET 2.0 uygulama genişletme üzerinde çalışıyorum. Tecrübem PHP/MySQL'de olduğundan, ASP ile olan yakınlığım şu anda 2 haftalık aralıktadır ve birlikte çalışan bir işçinin kodunu, ASP kitabımın ilk 90 sayfasını ve Google'ı incelemek üzere bir araya getirilmiştir. Uygulamada, veritabanıma bağlanan ve ihtiyacım olan bilgileri seçen bir SqlDataSource kontrolüm var. Daha sonra sonuçlar, sütunlardan birinde veriyi değiştirdiğim bir DataView'a kopyalanır ve daha sonra DataView'ı çıktı için bir GridView'a gönderirim. Sorun şu ki GridView'ı bu noktada sıralayamıyorum. Talimatları burada izledim: http://forums.asp.net/p/956540/1177923.aspx, ama boşuna. İşte C#

sayfa kodudur:

<form id="form1" runat="server"> 
<div> 
    <asp:SqlDataSource ID="Products" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString1 %>" 
     ProviderName="<%$ ConnectionStrings:ConnectionString1.ProviderName %>" OnLoad="ProductsDS_Load" 
     OnSelected="ProductsDS_Selected" DataSourceMode="DataSet"> 
    </asp:SqlDataSource> 

    <br /> 
    <asp:Label ID="testlabel" runat="server"></asp:Label> 
    <br /> 
    <asp:Label ID="testlabel2" runat="server"></asp:Label> 
    <br /><br /> 
    This table lists all 2000+ numbered projects which are at least partially in process.<br /> 
    The Project number link leads to a more detailed view of that project.<br /> 
    <br /> 
    <asp:Label runat="server" ID="numrows"></asp:Label> results returned. 
    <br /> 
    <asp:GridView ID="ProductsView" runat="server" EnableModelValidation="True" 
     AutoGenerateColumns="False" CellPadding="4" OnSorting="ProductsView_Sorting" 
     ForeColor="#333333" GridLines="None" AllowSorting="True"> 
     <AlternatingRowStyle BackColor="White" /> 
     <Columns> 
      <asp:HyperLinkField HeaderText="Project" SortExpression="PROJECT" 
       DataTextField="PROJECT" Target="subweeklyreport" DataNavigateUrlFields="PROJECT" 
       DataNavigateUrlFormatString="Products.aspx?p={0}" /> 
      <asp:BoundField Visible="false" DataField="PROJECTID" /> 
      <asp:BoundField DataField="PART" HeaderText="Part #" 
       SortExpression="PART" /> 
      <asp:BoundField DataField="DESCRIPTION" HeaderText="Description" 
       SortExpression="DESCRIPTION" /> 
      <asp:BoundField DataField="ENGMGR" HeaderText="Eng. Mgr." 
       SortExpression="ENGMGR" /> 
     </Columns> 
     <EditRowStyle BackColor="#7C6F57" /> 
     <FooterStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" /> 
     <HeaderStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" /> 
     <PagerStyle BackColor="#666666" ForeColor="White" HorizontalAlign="Center" /> 
     <RowStyle BackColor="#E3EAEB" /> 
     <SelectedRowStyle BackColor="#C5BBAF" Font-Bold="True" ForeColor="#333333" /> 
    </asp:GridView> 
</div> 
</form> 

Ve burada arkasında kod şudur:

protected void ProductsDS_Load(object sender, EventArgs e) 
{ 

    string SQLQuery = Query would go here; 

    testlabel2.Text = SQLQuery; 
    Products.SelectCommand = SQLQuery; 
    Products.DataBind(); 

    DataView dv = (DataView)Products.Select(new DataSourceSelectArguments()); 

    foreach (DataRow dr in dv.Table.Rows) 
    { 
     string name = dr["ENGMGR"].ToString(); 
     string[] explode = name.Split(' '); 
     string newname; 
     if (explode.Length == 3) 
     { 
      newname = explode[2] + ", " + explode[0]; 
     } 
     else 
     { 
      newname = explode[1] + ", " + explode[0]; 
     } 

     dr["ENGMGR"] = newname; 
     //testlabel.Text = dr["ENGMGR"].ToString(); 
    } 


    Products.DataBind(); 
    //ProductsView.DataSourceID = "Products"; 
    ProductsView.DataSource = dv; 
    ProductsView.DataBind(); 
    ProductsView.Enabled = true; 
    ProductsView.Visible = true; 

} 

protected void ProductsDS_Selected(object sender, SqlDataSourceStatusEventArgs e) 
{ 
    numrows.Text = e.AffectedRows.ToString(); 
} 

protected void ProductsView_Sorting(object sender, GridViewSortEventArgs e) 
{ 
    DataTable dataTable = ProductsView.DataSource as DataTable; 

    if (dataTable != null) 
    { 
     DataView dataView = new DataView(dataTable); 
     dataView.Sort = e.SortExpression + " " + ConvertSortDirectionToSql(e.SortDirection); 

     ProductsView.DataSource = dataView; 
     ProductsView.DataBind(); 
    } 
} 

private string ConvertSortDirectionToSql(SortDirection sortDirection) 
{ 
    string newSortDirection = String.Empty; 

    switch (sortDirection) 
    { 
     case SortDirection.Ascending: 
      newSortDirection = "ASC"; 
      break; 

     case SortDirection.Descending: 
      newSortDirection = "DESC"; 
      break; 
    } 

    return newSortDirection; 
} 

Ne oluyor düşünüyorum GridView sıralama için geri gönderme yaptığında, bu neden olmasıdır sorguyu yeniden yürütmek ve mevcut verileri GridView'da sıralamak için girişimin üzerine yaz, ancak bu davranışı engellemek için şu anda ASP hakkında yeterli bilgim yok. Herhangi bir yardım çok takdir edilecektir.

cevap

0

Kendi sorunumu çözmeyi bitirdim. Veri yüklemesini sayfa yüklemeleri arasında saklamak için bir oturum değişkeni oluşturdum ve sorguyu yürütmeden önce veri görünümünün depolanıp saklanmadığını kontrol etmeli ve varsa sıraya göre sıraya koyup sıraya koymaya çalıştım. Verilerin ilk sayfa görünümü ve sıralama arasında sunulmasını beklemediğimden, verilerin saklı bir kopyasını kullanmanın büyük bir sorun olacağını düşünmüyorum.