3 messaggi dal 02 luglio 2009
Ciao a tutti,
ho una gridview all'interno di un panel con la proprietà ScrollBars="true";
il problema si presenta quando sposto la scrollbar per scorrere la gridview e clicco su uno dei LinkButton presenti nell'ultima colonna (evidenziati in grassetto nel codice che segue) della riga che mi interessa manipolare, a causa del _doPostBack generato, perdo il "focus" sulla riga....in pratica viene ricaricata la gridview riportando la scrollbar in posizione iniziale.

Il codice del Panel e della GridView sono postati di seguito:
    
<asp:Panel ID="PannelloGridView"     
     runat="server"     
     ScrollBars="Vertical"     
     Height="415px"     
     Width="100%">      
    
    
<asp:GridView ID="GridView1"     
    runat="server"     
    AllowPaging="false"    
    AllowSorting="True"     
    AutoGenerateColumns="False"     
    DataSourceID="SqlDataSource1"    
    DataKeyNames="codunt,codacr"     
    Width="98%"    
    CssClass="tab_gen">    
    
<Columns>    
<asp:TemplateField HeaderText="" SortExpression="codunt">    
 <EditItemTemplate>    
  <asp:Label ID="TextBox"     
       runat="server"     
       Text='<%# Bind("codunt") %>'>    
  </asp:Label>    
 </EditItemTemplate>    
    
 <ItemTemplate>    
  <asp:Label ID="Label1"     
      runat="server"     
      Text='<%# Bind("codunt") %>'>    
  </asp:Label>    
 </ItemTemplate>                                    
</asp:TemplateField>    
    
<asp:TemplateField HeaderText="" SortExpression="descunt">    
 <EditItemTemplate>    
  <asp:Label ID="TextBox2" runat="server" Text='<%# Bind("descunt")  %>'></asp:Label>    
</EditItemTemplate>    
    
<ItemTemplate>    
  <asp:Label ID="Label2" runat="server" Text='<%# Bind("descunt") %>'></asp:Label>    
</ItemTemplate>                                    
</asp:TemplateField>    
    
<asp:TemplateField HeaderText=""     
   SortExpression="codacr"     
   ItemStyle-Width="100px">    
<EditItemTemplate>    
 <asp:DropDownList ID="DDL"      
     Runat="Server"    
     DataSourceID="SqlDataSourceDDL"     
     DataTextField="codacr"     
     DataValueField="codacr"  OnSelectedIndexChanged="DDL_SelectedIndexChanged"    
   AutoPostBack="true"     
   AppendDataBoundItems="true"    
   SelectedValue='<%# Bind("codacr") %>'>     
    
 <asp:ListItem Text="N/A" Value="--"></asp:ListItem>    
</asp:DropDownList>    
    
<asp:SqlDataSource ID="SqlDataSourceDDL"     
   Runat="server"     
   ConnectionString="<%$ ConnectionStrings:ConnectionString %>"    
    
  SelectCommand="" >                                            
</asp:SqlDataSource>    
</EditItemTemplate>    
    
<ItemTemplate>    
<asp:Label ID="Label3" runat="server" Text='<%# Bind("codacr") %>'></asp:Label>    
</ItemTemplate>                                    
    
<ItemStyle Width="100px"></ItemStyle>    
</asp:TemplateField>                                
    
<asp:TemplateField HeaderText="" SortExpression="descacr">    
<EditItemTemplate>    
<asp:Label ID="Label" runat="server" Text='<%# Bind("descacr") %>'></asp:Label>    
</EditItemTemplate>    
    
<ItemTemplate>    
<asp:Label ID="Label4" runat="server" Text='<%# Bind("descacr") %>'></asp:Label>    
</ItemTemplate>                                    
</asp:TemplateField>                                
<b>   
<asp:TemplateField ShowHeader="False">    
<EditItemTemplate>    
<asp:LinkButton ID="LinkButtonAggiorna"     
runat="server"     
CausesValidation="false"     
CommandName="Update"     
Text="Aggiorna"     
OnClick="LinkButtonAggiorna_Click">    
</asp:LinkButton>    
&nbsp;    
<asp:LinkButton ID="LinkButton2"     
runat="server"     
CausesValidation="False"     
CommandName="Cancel"     
Text="Annulla">    
</asp:LinkButton>    
</EditItemTemplate>    
    
<ItemTemplate>    
<asp:LinkButton ID="LinkButton1"    
runat="server"     
CausesValidation="False"    
CommandName="Edit"    
Text="Modifica">    
</asp:LinkButton>                                      
</ItemTemplate>    
</asp:TemplateField>   
</b>    
</Columns>    
</asp:GridView>    
</asp:Panel>   

Qualcuno ha qualche idea di come risolvere il problema?

Grazie in anticipo per le risposte
prova a impostare la proprietà MaintainScrollPositionOnPostback a true, la trovi a livello di direttiva @Page

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx
3 messaggi dal 02 luglio 2009
nostromo ha scritto:
prova a impostare la proprietà MaintainScrollPositionOnPostback a true, la trovi a livello di direttiva @Page


...già fatto! Il problema me lo risolve a metà! Il fatto è che a me interessa mantenere la posizione della scrollbar all'interno del panel e non su tutta la pagina.
2.841 messaggi dal 28 gennaio 2003
devi usare un pizzico di javascript.
Tu hai la tabella dentro un div. Questo ha le proprietà scrollTop e scrollLeft.
Perciò, quando si scatena il postback, basta ricavare queste proprietà, metterle dentro un hidden, recuperarle al ritorno sempre dagli hidden, e reimpostare queste proprietà del div.

Pietro
3 messaggi dal 02 luglio 2009
Ho risolto implementando il metodo OnRowDataBound della Gridview in questo modo:
protected void grid_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow && (e.Row.RowState & DataControlRowState.Edit) != 0)
        {
            Control c = e.Row.FindControl("DDLEdit");
            this.SetFocus(c);
        }

        if (GridView1.ShowFooter == true)
        {
            if (e.Row.RowType == DataControlRowType.Footer)
            {
                Control c = e.Row.FindControl("DDLInsert");
                this.SetFocus(c);
            }
        }
    }


Grazie a tutti per le risposte e spero che la mia soluzione possa essere d'aiuto a chiunque avesse il mio stesso problema!
2.841 messaggi dal 28 gennaio 2003
 Molto interessante, la archivio subito. Ciao

Pietro

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.
In primo piano

I più letti di oggi

Media
In evidenza
MISC