[ nebojsa4 @ 30.08.2012. 20:11 ] @
Evo o cemu se radi.
Imam tri button-a i jedan gridview.
Button-i su smesteni u jedan div dok je gridview u drugom.
U gridview-u AllowPaging je postavljen na false.
Kako da mi ostane fokusiran selektovani red kada kliknem na njega (prilikom selekcije istog) a ne da mi se pokaze ponovo prvi red tj. pocetak tabele?
Probao sam i sa MaintainScrollPositionOnPostback="true" i sa GridView1_SelectIndexChanger -> GridView2.SelectedRow.Focus(), ali nista ne uspeva.
Takodje sam koristio i UpdatePanel (UpdateMode="Conditional") i ScriptManager (EnablePartialRendering="true").
U ovom drugom slucaju sve radi, ali dok ne kliknem na jedan od button-a. Tada GridView ponovo prikaze sam vrh tabele.

default.aspx
Code:


 <div style="postion:fixed; top:0px; left:0px; width:100%; height:30px; overflow:hidden;">

  <asp:button runat="server" id="btnNovi" Text="Novi" />
  <asp:button runat="server" id="btnEdit" Text="Izmeni" />
  <asp:button runat="server" id="btnErase" Text="Brisanje" />

 </div>
 

 <div style="position:fixed; top:40px; left:0px; width:100%; height:400px; overflow:scroll;">

  <asp:GridView runat="server" id="GridView1" AllowPaging="false" AutoGenerateColumns="false">
    <Columns>

      <asp:CommandField ShowSelectButton="True" Visible="True" SelectText="Select" 
                   ItemStyle-CssClass="hideGC" HeaderStyle-CssClass="hideGC" >
             <HeaderStyle CssClass="hideGC" />
             <ItemStyle CssClass="hideGC" />
      </asp:CommandField>
      ... itd, itd.... razna polja.

      <SelectedRowStyle ForeColor="Yellow" BackColor="Blue" />

    </Columns>
  </asp:GridView>
 </div>

 <!-- "prozor" za editovanje podataka -->
 <div runat="server" id="bck" style="postion:fixed; top:0px; left:0px; width:100%; height:100%; background-color:silver; opacity:0.7; display:none;"></div>
 <div runat="server" id="WinEdit" style="postion:fixed; top:0px; left:0px; width:100%; height:100%; display:none;">
  <table cellpadding="0" cellspacing="0" style="width:100%; height:100%;">
   <tr>
    <td style="width:100%; height:100%; vertical-align:middle;">
     <center>
     <table cellpadding="0" cellspacing="0" style="width:500px; border:solid 1px gray;">
       <tr>
        <td>UPIS NOVOG PODATKA</td>
       </tr>
       <tr>
         <td>
          Prezime i ime: <br />
         <asp:textbox runat="server" id="txtIme" /></textbox>
         </td>
       </tr>
       .... itd, itd
       <tr>
        <td style="text-align:center; vertical-align:middle;">
         <asp:button runat="server" id="btnOdustani" Text="Odustani" />
         <asp:button runat="server" id="btnSnimi" Text="Snimi podatke" />
        </td>
       </tr>
     </table>
     </center> 
    </td>
   </tr>
  </table>
 </div>



default.aspx.vb

Code:


  Private Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound
    If e.Row.RowType = DataControlRowType.DataRow Then
      e.Row.Attributes("onclick") = ClientScript.GetPostBackClientHyperlink(GridView1, "Select$" + e.Row.RowIndex.ToString)
    End If
  End Sub

  Private Sub GridView1_SelectedIndexChanging(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewSelectEventArgs) Handles GridView1.SelectedIndexChanging
        Session.Item("RecNo") = CLng(GridView1.Rows(e.NewSelectedIndex).Cells(1).Text)
    End Sub

    Private Sub btnEdit_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnEdit.Click
     bck.Style.Item("display")="block"
     WinEdit.Style.Item("display")="block"
     itd, itd...
    End Sub

   Private Sub btnSnimi_Click(ByVal sender As Object, ByVal e As System.EventArgs) Hanfles btnEdit.Click
    ' vrsi se zapis u bazu podataka
    bck.Style.Item("display")="none"
    WinEdit.Style.Item("display")="none"
   End Sub



Poenta je u tome da mi se GridView prikazuje "ceo" (znaci da ima scrollbar, npr. imam 100 zapisa).
E, kada selektujem neki red (npr. 55), cim to odradim (red jeste selektovan i session-u je dodeljen broj zapisa) ali mi se gridview postavi tj. prikaze sam vrh tabele tj. njega.
Ovo se ne desava u slucaju upotrebe UpdatePanel-a ali.... ali, cim kliknem na npr. btnEdit, gridview opet uradi isto, postavi se na sam vrh... a potrebno mi je da se nista po tom pitanju ne desi, nego da i dalje imam prikazan tj. fokusiran selektovani red.
Cak i kada postavim GridView.SelectedRow.Focus() opet ista prica.

Na nekom forumu sam procitao da kombinacija UpdatePanel i GridView dosta usporava rad tako da sam odlucio odbaciti ovu opciju (ionako samo "parcijalno" fukncionise).

Da li neko ima resenje za ovaj problem?

Unapred hvala na odgovorima i/ili savetima.

Pozdrav svima.
[ pl4stik @ 30.08.2012. 21:14 ] @
Dodaj na vrh strane MaintainScrollPositionOnPostback="true"
[ nebojsa4 @ 30.08.2012. 21:51 ] @
6. recenica mog prvog posta - ne funkcionise.
[ nebojsa4 @ 01.09.2012. 13:38 ] @
Niko nema ni ideju? :(
[ dusans @ 01.09.2012. 15:18 ] @
To moraš da uradiš preko javascript-a, tj da zakačiš client side handlere na Ajax evente.
http://www.codeproject.com/Art...l-position-of-a-DIV-on-AJAX-po

Koliko sam uspeo da vidim, ne postoji gotova .Net komponenta koja bi radila to što tebi treba a mislim da ne bi bilo teško napraviti je.
[ nebojsa4 @ 01.09.2012. 17:36 ] @
mnogo ti hvala dunans. to je to.

nije funkcionisalo po datom primeru pa sam napravio male izmene i sada radi extra da ne moze bolje :)
hvala jos jednom.


evo i koda :

default.aspx
Code:

 <script type="text/javascript" language="javascript">
            function saveScrollPos() {
                document.getElementById("scrollPos").value =
             document.getElementById("pnlTabela").scrollTop;
            }
            function setScrollPos() {
                document.getElementById("pnlTabela").scrollTop =
             document.getElementById("scrollPos").value;
            }
</script>

<!-- u BODY je dodato onload="setScrollPos();" -->
<!-- ubacena je jedna kontrola -->
<!-- drugom DIV-u, iz prvog primera je dodato id="pnlTabela", runat="server" i onscroll="saveScrollPos();" -->

<body onload="setScrollPos();">

  <input type="hidden" id="scrollPos" name="scrollPos" value="0" runat="server"/>

  <div style="position:fixed; top:40px; left:0px; width:100%; height:400px; overflow:scroll;" id="pnlTabela" runat="server" onscroll="saveScrollPos();">

  <asp:GridView runat="server" id="GridView1" AllowPaging="false" AutoGenerateColumns="false">
    <Columns>

      <asp:CommandField ShowSelectButton="True" Visible="True" SelectText="Select" 
                   ItemStyle-CssClass="hideGC" HeaderStyle-CssClass="hideGC" >
             <HeaderStyle CssClass="hideGC" />
             <ItemStyle CssClass="hideGC" />
      </asp:CommandField>
      ... itd, itd.... razna polja.

      <SelectedRowStyle ForeColor="Yellow" BackColor="Blue" />

    </Columns>
  </asp:GridView>
  </div>
</body>



[Ovu poruku je menjao nebojsa4 dana 01.09.2012. u 18:46 GMT+1]