[ASP.NET] Kan dataset niet ophalen uit sessie.

Pagina: 1
Acties:

  • DJ-B
  • Registratie: September 2001
  • Laatst online: 21-04 22:00
Na heel veel uurtjes google en diverse pogingen post ik het probleem hier.
Ik heb een dataset die ik na elke postback weer beschikbaar wil hebben. Hiervoor sla ik de dataset op in een Session.
Echter lukt het me niet om de gegevens weer terug te halen uit de Session om ze vervolgens weer te laten zien.

Heeft iemand meer ervaring met het opslaan van een dataset in een sessie?

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
<%@ Page Language="VB" Debug="True" Explicit="True" %>
<%@ import Namespace="System.Data" %>
<%@ import Namespace="System.Data.OleDb" %>

<script runat="server">
  Dim ds As New DataSet
  Dim dTable As New DataTable("Users")
    
  Sub Page_Load
   If Not Page.IsPostBack Then
        BuildColumns      
      Else
        BuildColumns      
        ds = CType(Session("SaveDataSet"), DataSet)
      End If
    End Sub
    
    Sub BuildColumns
      dTable.Columns.Add("UserName", System.Type.GetType ("System.String"))
      dTable.Columns.Add("LastName", System.Type.GetType ("System.String"))
      dTable.Columns.Add("UserId", System.Type.GetType ("System.Int32"))
      dTable.Columns("UserId").AutoIncrement = True
    
      ds.Tables.Add(dTable)
    
      Dim Keys() As DataColumn = {ds.Tables("Users").Columns("UserId")}
      ds.Tables("Users").PrimaryKey = Keys
      
      AddUserGrid.DataSource = ds
      AddUserGrid.DataBind()
    
    End Sub
     
       
       
   Sub doInsert(ByVal sender As Object, ByVal e As DataGridCommandEventArgs)
     If e.CommandName = "Insert" Then
     Dim Username As String
     Dim txtUserName As TextBox
           '... declarations for remaining data fields
    
           'Read in the values of the TextBoxes
           txtUserName = e.Item.FindControl("add_Username")
           UserName = txtUserName.Text
           '... get values for remaining data fields
    
     Dim dr As DataRow = dTable.NewRow()
      dr(0) = "Jan"
      dr(1) = "Jansen"
      dTable.Rows.Add(dr)
      
    'Save the dataset to session
     Session("SaveDataSet") = ds
    
           'Rebind the DataGrid
           AddUserGrid.EditItemIndex = -1
           AddUserGrid.DataSource = ds
           AddUserGrid.DataBind()
           
           
       End If
    End Sub

</script>
<html>
<head>
</head>
<body>
    <form runat="server">
        <asp:DataGrid id="AddUserGrid" runat="server" ShowFooter="True" AutoGenerateColumns="False" OnItemCommand="DoInsert">
            <ItemStyle backcolor="AliceBlue"></ItemStyle>
            <HeaderStyle backcolor="LightGray"></HeaderStyle>
            <Columns>
                <asp:TemplateColumn HeaderText="Username">
                    <ItemTemplate>
                      <%# Container.DataItem("UserName") %>
                    </ItemTemplate>
                    <FooterTemplate>
                        <asp:TextBox ID="add_username" Columns="10" Runat="Server" />
                    </FooterTemplate>
                    <EditItemTemplate>
                        <asp:TextBox ID="add_username" Columns="10" Text='<%# Container.DataItem("UserName") %>' Runat="server" />
                    </EditItemTemplate>
                </asp:TemplateColumn>
                
                <asp:TemplateColumn HeaderText="Firstname">
                    <ItemTemplate>
                      bla
                    </ItemTemplate>
                    <FooterTemplate>
                        <asp:TextBox ID="add_firstname" Columns="10" Runat="Server" />
                    </FooterTemplate>
                    <EditItemTemplate>
                        <asp:TextBox ID="add_firstname" Columns="10" Text="bla" Runat="server" />
                    </EditItemTemplate>
                </asp:TemplateColumn>
                
                <asp:EditCommandColumn ButtonType="PushButton" UpdateText="Update" CancelText="Cancel" EditText="Edit" HeaderText="Edit" />
                
                <asp:TemplateColumn HeaderText="Delete">
                  <FooterTemplate>
                    <asp:Button CommandName="Insert" Text="Add" ID="btnAdd" Runat="server" />
                  </FooterTemplate>
                  <ItemTemplate>
                    <asp:Button CommandName="Delete" Text="Delete" ID="btnDel" Runat="server" />
                  </ItemTemplate>
                </asp:TemplateColumn> 
            </Columns>
        </asp:DataGrid>
    </form>
</body>
</html>

  • whoami
  • Registratie: December 2000
  • Laatst online: 21-04 17:18
Ik zie nergens code waar je die dataset uit de sessie haalt?

Heb je trouwens zelf al eens je code gedebugged ? Het is niet de bedoeling dat je hier zomaar 100 regels code kunt neerzetten, met een kleine omschrijving van je probleem, en anderen het dan voor jou laat debuggen.

die eerste 7 regels code in je page-load vind ik trouwens maar raar.
Waarom kijk je gewoon niet of je in de session een variable hebt die een bepaalde naam heeft , en indien dit het geval is, die variable ophaalt.

[ Voor 30% gewijzigd door whoami op 09-12-2005 13:17 ]

https://fgheysels.github.io/


Verwijderd

Bij mijn ASP.NET applicatie gaat het opslaan gewoon goed... Gaat het met andere sessievar's wel goed?

  • joopst
  • Registratie: Maart 2005
  • Laatst online: 01-10-2024
als je je dataset beschikbaar wilt hebben in je sessie na een postback, dan moet je hem voor je postback in de sessie stoppen.
deze regel:
code:
1
Session("SaveDataSet") = ds

moet je dus 1x doen in de page_load bij NOT IsPostBack


nu heb je die regel in de eventhandler geplaatst, zodat je iedere keer als je je insert uitvoert een nieuwe dataset in de sessie stopt (en daarmee de 'oude' kwijtraakt).

  • DJ-B
  • Registratie: September 2001
  • Laatst online: 21-04 22:00
joopst schreef op vrijdag 09 december 2005 @ 13:18:
als je je dataset beschikbaar wilt hebben in je sessie na een postback, dan moet je hem voor je postback in de sessie stoppen.
deze regel:
code:
1
Session("SaveDataSet") = ds

moet je dus 1x doen in de page_load bij NOT IsPostBack


nu heb je die regel in de eventhandler geplaatst, zodat je iedere keer als je je insert uitvoert een nieuwe dataset in de sessie stopt (en daarmee de 'oude' kwijtraakt).
Juist, klinkt logisch... Ik heb het aangepast maar helaas zonder resultaat.

code:
1
2
3
4
5
6
7
8
Sub Page_Load
   If Not Page.IsPostBack Then
        BuildColumns      
        Session("SaveDataSet") = ds
      Else
        BuildColumns      
        ds = CType(Session("SaveDataSet"), DataSet)
      End If

Verwijderd

DJ-B schreef op vrijdag 09 december 2005 @ 13:31:
[...]


Juist, klinkt logisch... Ik heb het aangepast maar helaas zonder resultaat.

code:
1
2
3
4
5
6
7
8
Sub Page_Load
   If Not Page.IsPostBack Then
        BuildColumns      
        Session("SaveDataSet") = ds
      Else
        BuildColumns      
        ds = CType(Session("SaveDataSet"), DataSet)
      End If
Dat is niet logisch, zo stop je elke keer een nieuwe dataset in je sessie-variabele :? Is totaal overbodig IMO. Wordt de regel uberhaupt wel aangeroepen waar de dataset opgeslagen wordt in de sessievar?

[ Voor 15% gewijzigd door Verwijderd op 09-12-2005 13:36 ]


  • DJ-B
  • Registratie: September 2001
  • Laatst online: 21-04 22:00
Verwijderd schreef op vrijdag 09 december 2005 @ 13:34:
[...]

Dat is niet logisch, zo stop je elke keer een nieuwe dataset in je sessie-variabele :? Is totaal overbodig IMO. Wordt de regel uberhaupt wel aangeroepen waar de dataset opgeslagen wordt in de sessievar?
Ja die word aangeroepen, tenminste daar lijkt het op.
als ik
code:
1
Response.Write(ds)


Aanroep krijg ik dit als resultaat:
System.Data.DataSet

Verwijderd

DJ-B schreef op vrijdag 09 december 2005 @ 13:41:
[...]


Ja die word aangeroepen, tenminste daar lijkt het op.
als ik
code:
1
Response.Write(ds)


Aanroep krijg ik dit als resultaat:
System.Data.DataSet
Die Response heb je wel op regel 53 gezet?

Zo ja, probeer eens een andere sessie-variabele, zoals een integer.

  • cowgirl
  • Registratie: November 2000
  • Laatst online: 18-12-2025
Moet er na het wijzigen van de DataSet niet gewoon opnieuw gebind worden? De DataBind gebeurd nu in de Sub BuildColumns en daarna wordt een nieuwe DataSet aan ds toegekend.

  • DJ-B
  • Registratie: September 2001
  • Laatst online: 21-04 22:00
cowgirl schreef op vrijdag 09 december 2005 @ 14:31:
Moet er na het wijzigen van de DataSet niet gewoon opnieuw gebind worden? De DataBind gebeurd nu in de Sub BuildColumns en daarna wordt een nieuwe DataSet aan ds toegekend.
Goeie opmerking, ik heb de databind verplaatst tot na het vullen van de dataset, alleen zonder resultaat.

Ik lijkt er steeds meer op dat de Routine DoInsert niet aangeroepen word.
Ik heb een Response.Write("bla") toegevoegd maar krijg dat nergens terug...

word vervolgd.

Verwijderd

Heb je al eens geprobeerd om de viewstate te gebruiken?


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 Private lvobjInfo As DataSet

    ''' -----------------------------------------------------------------------------
    ''' <summary>
    ''' Specifies control datasource
    ''' </summary>
    ''' <value>Data to display</value>
    ''' <history></history>
    ''' -----------------------------------------------------------------------------
    Public Overridable Property DataSource() As DataSet
        Set(ByVal Value As DataSet)
            ViewState.Add(Me.ID + "DS", Value)
            lvobjInfo = Value
        End Set
        Get
            If (lvobjInfo Is Nothing) Then
                lvobjInfo = CType(Viewstate.Item(Me.ID + "DS"), DataSet) 
            End If
            Return lvobjInfo
        End Get
    End Property

[ Voor 28% gewijzigd door Verwijderd op 09-12-2005 15:05 ]


  • cowgirl
  • Registratie: November 2000
  • Laatst online: 18-12-2025
DJ-B schreef op vrijdag 09 december 2005 @ 14:51:
Ik lijkt er steeds meer op dat de Routine DoInsert niet aangeroepen word.
Ik heb een Response.Write("bla") toegevoegd maar krijg dat nergens terug...
Nou weet ik bijna niets van VB, ik doe zelf alleen c# maar hoort er achter die sub niet nog een Handles <event>. Oftewel waar maak je bekend dat bij een event op de datagrid doInsert uitgevoerd moet worden?

  • DJ-B
  • Registratie: September 2001
  • Laatst online: 21-04 22:00
cowgirl schreef op vrijdag 09 december 2005 @ 15:10:
[...]

Nou weet ik bijna niets van VB, ik doe zelf alleen c# maar hoort er achter die sub niet nog een Handles <event>. Oftewel waar maak je bekend dat bij een event op de datagrid doInsert uitgevoerd moet worden?
Deze staat op regel 70:
OnItemCommand="DoInsert"

dus dat zit goed, toch bedankt voor het meedenken!
Pagina: 1