Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: datalist error

  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    336

    datalist error

    Salve cerco di semplificare un problema già posto precedentemente.
    StSub DataList1_UpdateCommand(ByVal sender As Object, ByVal e As DataListCommandEventArgs)

    Dim IdCatText As System.Web.UI.WebControls.TextBox = CType(e.Item.FindControl("IdCategoria"), TextBox)
    Dim CatText As System.Web.UI.WebControls.TextBox = CType(e.Item.FindControl("Categoria"), TextBox)
    Dim DesCatText As System.Web.UI.WebControls.TextBox = CType(e.Item.FindControl("Descrizione"), TextBox)
    Dim IdCat As String = IdCatText.Text
    Dim Cat As String = CatText.Text
    Dim DesCat As String = DesCatText.Texto cercando di effettuare l'update di un datalist con il seguente metodo:
    Evito di scrivervi il resto del codice.
    Ebbene mi restituisce un errore nella riga segnata in rosso del tipo: riferimento ad un oggetto non impostato su istanza di oggetto.
    Che vuol dire?

  2. #2
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    559
    sembra che sbagli il nome di qualche controllo...
    posta la parte aspx, ovvero il template del datalist!
    se nella vita avro avuto la possiblita di aiutare qualcuno non avro vissuto invano (E. Dikinson)

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    336
    Ma la riga che mi segna in rosso è la seguente:
    Dim IdCat As String = IdCatText.Text

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    559
    peche idCat è nullo, questo si ha perche la findControl("IdCategoria") non trova nessun oggetto.
    per questo dico, posta l'item template per capire come mai non trova questo controllo!

    ps: nota che la ricerca è caseSensitive, quindi se nell' item template hai scritto ad esempio idCategoria con la i in minuscolo la findControl non lo trova!
    se nella vita avro avuto la possiblita di aiutare qualcuno non avro vissuto invano (E. Dikinson)

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    336
    Questo è il codice del datalist:
    <aspataList id="DataList1" runat="server"
    BorderColor="black"
    BorderWidth="1"
    GridLines="Both"
    CellPadding="3"
    CellSpacing="0"
    Font-Names="Verdana"
    Font-Size="8pt"
    Width="150px"
    HeaderStyle-BackColor="#aaaadd"
    AlternatingItemStyle-BackColor="Gainsboro"
    EditItemStyle-BackColor="lightgreen"
    OnEditCommand="DataList1_EditCommand"
    OnUpdateCommand="DataList1_UpdateCommand"
    OnCancelCommand="DataList1_CancelCommand"
    >
    <HeaderTemplate>
    Items
    </HeaderTemplate>
    <ItemTemplate>
    <asp:LinkButton id="button1" runat="server" Text="Edit" CommandName="edit" />
    <%#DataBinder.Eval(Container.DataItem, "IdCategoria")%>
    </ItemTemplate>
    <EditItemTemplate>
    Identificativo:
    <asp:Label id="Label1" runat="server"
    Text='<%# DataBinder.Eval(Container.DataItem, "IdCategoria") %>' />


    Categoria:
    <asp:TextBox id="Text1" runat="server"
    Text='<%# DataBinder.Eval(Container.DataItem, "NomeCategoria") %>' />


    Descrizione:
    <asp:TextBox id="Text2" runat="server"
    Text='<%# DataBinder.Eval(Container.DataItem, "Descrizione") %>' />


    <asp:LinkButton id="button2" runat="server" Text="Update"
    CommandName="update" />
    <asp:LinkButton id="button3" runat="server" Text="Cancel"
    CommandName="cancel" />
    </EditItemTemplate>

    </aspataList>

  6. #6
    Utente di HTML.it L'avatar di cassano
    Registrato dal
    Aug 2004
    Messaggi
    3,002
    Ma non dovresti cercare "button1" ??

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    559
    esatto, come dice cassano il findControl cerca gli id dei controlli
    (e ti consiglio caldamente di metterci dei nomi piu significativi).

    inoltre accertati di essere in modalita edit
    (normalmente non lo sei; lo sei impostando editItemIndex a al numero di riga e rifacendo quindi il databind).
    se nella vita avro avuto la possiblita di aiutare qualcuno non avro vissuto invano (E. Dikinson)

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    336
    scusate ma perchè allora in questo codice trovato su internet tutto va bene:
    <%@ Import Namespace="System.Data" %>

    <html>
    <head>

    <script language="VB" runat="server">

    Dim Cart As DataTable
    Dim CartView As DataView

    Sub Page_Load(sender As Object, e As EventArgs)

    Dim dr As DataRow
    Dim I As Integer

    If Session("DL3VB_ShoppingCart") Is Nothing Then

    Cart = New DataTable()
    Cart.Columns.Add(new DataColumn("Qty", GetType(String)))
    Cart.Columns.Add(new DataColumn("Item", GetType(String)))
    Cart.Columns.Add(new DataColumn("Price", GetType(String)))
    Session("DL3VB_ShoppingCart") = Cart

    'Make some rows and put some sample data in
    For I = 1 To 4
    dr = Cart.NewRow()
    If (i Mod 2 <> 0) Then
    dr(0) = "2"
    Else
    dr(0) = "1"
    End If
    dr(1) = "Item " & i.ToString
    dr(2) = (1.23 * (i + 1)).ToString
    Cart.Rows.Add(dr)
    Next
    Else
    Cart = Session("DL3VB_ShoppingCart")
    End If

    CartView = New DataView(Cart)
    CartView.Sort="Item"
    If Not IsPostBack Then
    ' need to load this data only once
    BindList
    End If

    End Sub

    Sub BindList()
    DataList1.DataSource= CartView
    DataList1.DataBind
    End Sub

    Sub DataList_EditCommand(sender As Object, e As DataListCommandEventArgs)
    DataList1.EditItemIndex = e.Item.ItemIndex
    BindList
    End Sub

    Sub DataList_CancelCommand(sender As Object, e As DataListCommandEventArgs)
    DataList1.EditItemIndex = -1
    BindList
    End Sub

    Sub DataList_UpdateCommand(sender As Object, e As DataListCommandEventArgs)
    Dim itemLabel As System.Web.UI.WebControls.Label = e.Item.FindControl("Label1")
    Dim qtyText As System.Web.UI.WebControls.TextBox = e.Item.FindControl("Text1")
    Dim priceText As System.Web.UI.WebControls.TextBox = e.Item.FindControl("Text2")

    Dim item As String = itemLabel.Text
    Dim qty As String = qtyText.Text
    Dim price As String = priceText.Text

    ' with a database, we'd use an update command. Since we're using an in-memory
    ' DataTable, we'll delete the old row and replace it with a new one
    'remove old entry
    CartView.RowFilter = "Item='" & item & "'"
    If CartView.Count > 0 Then
    CartView.Delete(0)
    End If
    CartView.RowFilter = ""

    'add new entry
    Dim dr As DataRow = Cart.NewRow()
    dr(0) = qty
    dr(1) = item
    dr(2) = price
    Cart.Rows.Add(dr)

    DataList1.EditItemIndex = -1
    BindList
    End Sub

    </script>

    </head>
    <body>

    <h3><font face="Verdana">Editing DataList Items</font></h3>


    </p>

    <form runat=server>
    <font face="Verdana" size="-1">

    <aspataList id="DataList1" runat="server"
    BorderColor="black"
    BorderWidth="1"
    GridLines="Both"
    CellPadding="3"
    CellSpacing="0"
    Font-Names="Verdana"
    Font-Size="8pt"
    Width="150px"
    HeaderStyle-BackColor="#aaaadd"
    AlternatingItemStyle-BackColor="Gainsboro"
    EditItemStyle-BackColor="lightgreen"
    OnEditCommand="DataList_EditCommand"
    OnUpdateCommand="DataList_UpdateCommand"
    OnCancelCommand="DataList_CancelCommand"
    >
    <HeaderTemplate>
    Items
    </HeaderTemplate>
    <ItemTemplate>
    <asp:LinkButton id="button1" runat="server" Text="Edit" CommandName="edit" />
    <%# DataBinder.Eval(Container.DataItem, "Item") %>
    </ItemTemplate>
    <EditItemTemplate>
    Item:
    <asp:Label id="Label1" runat="server"
    Text='<%# DataBinder.Eval(Container.DataItem, "Item") %>' />


    Quantity:
    <asp:TextBox id="Text1" runat="server"
    Text='<%# DataBinder.Eval(Container.DataItem, "Qty") %>' />


    Price:
    <asp:TextBox id="Text2" runat="server"
    Text='<%# DataBinder.Eval(Container.DataItem, "Price") %>' />


    <asp:LinkButton id="button2" runat="server" Text="Update"
    CommandName="update" />
    <asp:LinkButton id="button3" runat="server" Text="Cancel"
    CommandName="cancel" />
    </EditItemTemplate>

    </aspataList>

    </font>
    </form>

    </body>
    </html>


    l'unica differenza rispetto al mio è che io il mio datalist viene popolato da un database.

  9. #9
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    559
    Dim itemLabel As System.Web.UI.WebControls.Label = e.Item.FindControl("Label1")
    Dim qtyText As System.Web.UI.WebControls.TextBox = e.Item.FindControl("Text1")
    Dim priceText As System.Web.UI.WebControls.TextBox = e.Item.FindControl("Text2")

    guarda cosa cerca il findControl?
    gli ID degli oggetti!
    tu invece cerchi la proprieta a cui e' bindato!
    se nella vita avro avuto la possiblita di aiutare qualcuno non avro vissuto invano (E. Dikinson)

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    336
    Ti ringrazio. Ora ho capito. Il tuo aiuto è stato utilissimo.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.