Just nu i M3-nätverket
Gå till innehåll

Fixerad radmarkering i GridView


KarlGunnar

Rekommendera Poster

Jag har här lite kod som gör så att radmarkeringen i en GridView stannar vid den markerade raden. Jag har använt det flera gånger och det fungerar perfekt. 

<%@ Page Language="vb" Debug="true" EnableEventValidation = "false" maintainscrollpositiononpostback="true" %>

<script runat="server">
    Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim a(100) As String
        Dim i As Integer
        For i = 0 To 100
            a(i) = i
        Next
        GridView1.DataSource = a
        GridView1.DataBind()
        If Not Me.Page.IsPostBack Then
        End If
    End Sub

    Sub GridView1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles GridView1.SelectedIndexChanged
        GridView1.Rows(GridView1.SelectedIndex).BackColor = Drawing.Color.Aqua
    End Sub
</script>

<html>
<head>
    <script type="text/javascript">
        window.onload = function () {
            var strCook = document.cookie;
            if (strCook.indexOf("!~") != 0) {
                var intS = strCook.indexOf("!~");
                var intE = strCook.indexOf("~!");
                var strPos = strCook.substring(intS + 2, intE);
                document.getElementById("divTest").scrollTop = strPos;
            }
        }

        function SetDivPosition() {
            var intY = document.getElementById("divTest").scrollTop;
            document.title = intY;
            document.cookie = "yPos=!~" + intY + "~!";
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
        <div style="width:500px; height:200px; overflow-y:scroll; overflow-x:hidden;" runat="server" id="divTest" onscroll="SetDivPosition()">
            <asp:GridView ID="GridView1" runat="server" AutoGenerateSelectButton="True">
            </asp:GridView>
        </div>
    </form>
</body>
</html>

Nu skall jag lägga in en GridView i en MultiView och då funkar det inte , får följande felmeddelande:

 

Körningsfel i JavaScript: Det går inte att ange egenskapen scrollTop för en referens som är odefinierad eller null.

 

HTML-koden med MultiView ser ut så här:

<body>
    <form id="form1" runat="server">
        <div>
            <asp:MultiView ID="MultiView1" runat="server">
                <asp:View ID="View1" runat="server">
                    <div style="width:500px; height:200px; overflow-y:scroll; overflow-x:hidden;" runat="server" id="divTest" onscroll="SetDivPosition()">
                        <asp:GridView ID="GridView1" runat="server" AutoGenerateSelectButton="True">
                        </asp:GridView>
                    </div>
                </asp:View>
                <asp:View ID="View2" runat="server">
                    <div>
                        XXXXXXX
                    </div>
                </asp:View>
            </asp:MultiView>
        </div>
    </form>
</body>

Det som strular är säkerligen PostBack!

Är det någon som har en idé hur man kan komma förbi detta problem? 

Länk till kommentar
Dela på andra webbplatser

Om du kollar id på diven så blir den inte "divTest" utan ett id som blir längre (genererat av servern). Javascriptet hittar alltså inte objektet. eftersom det inte finns något med det namnet.

 

Du kan dock använda detta: 

document.getElementById("<%= divTest.ClientID %>").scrollTop
Länk till kommentar
Dela på andra webbplatser

 

Om du kollar id på diven så blir den inte "divTest" utan ett id som blir längre (genererat av servern). Javascriptet hittar alltså inte objektet. eftersom det inte finns något med det namnet.

 

Du kan dock använda detta: 

document.getElementById("<%= divTest.ClientID %>").scrollTop

Jag får samma fel med <%= divTest.ClientID %> 

Länk till kommentar
Dela på andra webbplatser

Jag får samma fel med <%= divTest.ClientID %> 

Jag löste det genom att lägga in följande kod under Page Load:

        If MultiView1.ActiveViewIndex = 0 Then
            ScriptManager.RegisterStartupScript(Me, Me.GetType(), "divTest", "divTest();", True)
        End If

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...