+ Rispondi al Thread
Visualizzazione dei risultati da 1 a 9 su 9

Discussione: [ASP.Net]problema con bind

  1. #1
    perla0279 non è in linea Scolaretto
    Post
    230

    [ASP.Net]problema con bind

    ciao
    ho un probblema con il bind della pagina.
    Vi posto il codice:
    codice:
    
    ProtectedSub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) HandlesMe.Load
    Dim dt As DataTableCollection
    dt = RicTesti("006", "001")
    dt = RicercaProdotti("001", "001")
    Bind1(dt(0))
    Bind(dt(0))
    MyRepeater.DataSource = dt.Item(0)
    MyRepeater.DataBind()
    EndSub
    
    codice:
    
    PrivateSub Bind(ByVal dtProdotti800 As DataTable)
     
     
     
    ForEach row As DataRow In dtProdotti800.Rows
    row("Immagine") = String.Format("<a href=""{0}""><img src=""images/mobili800/{1}""></a>", row("Collegamento").ToString().Trim(), row("Immagine").ToString().Trim())
    Next
    EndSub
    PrivateSub Bind1(ByVal dtArticoli As DataTable)
    ForEach row As DataRow In dtArticoli.Rows
    Dim lt As Literal = CType(Panel1.FindControl(Trim(row("CodiceCampo").ToString())), Literal)
    IfNot (lt IsNothing) Then
    lt.Text = row("Prompt").ToString()
    EndIf
    Next
    EndSub
    
    sul secondo bind mi dice che la colonna "codiceCampo" non fa parte della tabella Mobili800.

    solo che io ho distinto le due tabelle.....almeno così credo.....

  2. #2
    L'avatar di SignIn
    SignIn non è in linea Scribacchino
    Luogo
    Milano
    Post
    1,026
    ...senza guardare tutto il resto...soffermati su queste due righe:
    codice:
    dt = RicTesti("006", "001")
    dt = RicercaProdotti("001", "001")

  3. #3
    perla0279 non è in linea Scolaretto
    Post
    230
    ho provato a corregere così

    dt = RicTesti("006", "001")
    dt1 = RicercaProdotti("001", "001")


    ma niente, adesso esegue il primo bind, ma al secondo mi da lo stesso errore

  4. #4
    L'avatar di SignIn
    SignIn non è in linea Scribacchino
    Luogo
    Milano
    Post
    1,026
    ...ma hai corretto a cascata, passando ai vari metodi Bind la DataTable relativa?

  5. #5
    perla0279 non è in linea Scolaretto
    Post
    230
    dovrei aver modificato tutto in modo corretto.

    Adesso al secondo bind mi dice che non trova la tabella 0.....cosa signifa questo errore???

    [CODE][Private Function RicercaProdotti(ByVal RiferimentoPagina As String, ByVal RiferimentoLingua As String) As DataTableCollection
    Dim da As New SqlClient.SqlDataAdapter
    Dim ds As New DataSet
    Try

    Dim testCMD As SqlClient.SqlCommand = New SqlClient.SqlCommand("RicercaProdotti", objdb)
    testCMD.CommandType = CommandType.StoredProcedure



    Dim pRiferimentoPagina As SqlClient.SqlParameter = testCMD.Parameters.Add("@RiferimentoPagina", SqlDbType.Char, 3)
    pRiferimentoPagina.Direction = ParameterDirection.Input
    pRiferimentoPagina.Value = RiferimentoPagina


    Dim pRiferimentoLingua As SqlClient.SqlParameter = testCMD.Parameters.Add("@RiferimentoLingua", SqlDbType.Char, 3)
    pRiferimentoLingua.Direction = ParameterDirection.Input
    pRiferimentoLingua.Value = RiferimentoLingua

    da.SelectCommand = testCMD

    da.Fill(ds, "Prodotti800")

    Catch ex As Exception

    End Try
    Return ds.Tables
    End Function

    Private Function RicTesti(ByVal RiferimentoPagina As String, ByVal RiferimentoLingua As String) As DataTableCollection
    Dim da As New SqlClient.SqlDataAdapter
    Dim ds As New DataSet
    Try

    Dim testCMD As SqlClient.SqlCommand = New SqlClient.SqlCommand("RicercaTesti", objdb)
    testCMD.CommandType = CommandType.StoredProcedure



    Dim pRiferimentoPagina As SqlClient.SqlParameter = testCMD.Parameters.Add("@RiferimentoPagina", SqlDbType.Char, 3)
    pRiferimentoPagina.Direction = ParameterDirection.Input
    pRiferimentoPagina.Value = RiferimentoPagina


    Dim pRiferimentoLingua As SqlClient.SqlParameter = testCMD.Parameters.Add("@RiferimentoLingua", SqlDbType.Char, 3)
    pRiferimentoLingua.Direction = ParameterDirection.Input
    pRiferimentoLingua.Value = RiferimentoLingua

    da.SelectCommand = testCMD

    da.Fill(ds, "Articoli")

    Catch ex As Exception

    End Try
    Return ds.Tables
    End Function

    Protected Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Me.Load
    Dim dt As DataTableCollection
    Dim dt1 As DataTableCollection

    dt = RicTesti("006", "001")
    dt1 = RicercaProdotti("001", "001")

    Bind1(dt(0))
    Bind(dt1(0))

    MyRepeater.DataSource = dt.Item(0)
    MyRepeater.DataBind()
    End Sub

    Private Sub Bind(ByVal dt1Prodotti800 As DataTable)




    For Each row As DataRow In dt1Prodotti800.Rows

    row("Immagine") = String.Format("<a href=""{0}""><img src=""images/mobili800/{1}""></a>", row("Collegamento").ToString().Trim(), row("Immagine").ToString().Trim())
    Next

    End Sub

    Private Sub Bind1(ByVal dtArticoli As DataTable)

    For Each row As DataRow In dtArticoli.Rows
    Dim lt As Literal = CType(Panel1.FindControl(Trim(row("CodiceCampo").T oString())), Literal)
    If Not (lt Is Nothing) Then
    lt.Text = row("Prompt").ToString()
    End If
    Next

    End Sub/CODE]

  6. #6
    perla0279 non è in linea Scolaretto
    Post
    230
    vi invio ancher il codice della pagina asp....magari l'errore è li e io non me ne sono accorta
    codice:
    <ItemTemplate>
              <tr>
             <td width="65" height="78" align="center" valign="middle" class="row_bord" ><%#DataBinder.Eval(Container.DataItem, "Immagine")%></td>
             <td width="820" class="row_bord"><table width="816" border="0">
                  <tr>
                    <td width="58" class="galleria">Nome: </td>
                    <td width="270" class="galleria2"><%#DataBinder.Eval(Container.DataItem, "Nome")%> </td>
                    <td width="80" class="galleria">Codice:</td>
                    <td width="172" class="galleria2"> <%#DataBinder.Eval(Container.DataItem, "Codice")%></td>
                    <td width="87" class="galleria">Peso : </td>
                    <td width="123" class="galleria2"><%#DataBinder.Eval(Container.DataItem, "Peso")%> </td>
                  </tr>
                  <tr>
                    <td colspan="6" class="galleria2"><%#DataBinder.Eval(Container.DataItem, "Descrizione")%> </td>
                  </tr>
                  <tr>
                    <td colspan="2" class="galleria2">&nbsp;</td>
                    <td class="galleria2"><span class="galleria">Misure: </span></td>
                    <td class="galleria2"><%#DataBinder.Eval(Container.DataItem, "Misure")%> </td>
                    <td class="galleria">Prezzo:</td>
                    <td class="galleria2"><%#DataBinder.Eval(Container.DataItem, "Immagine")%></td>
                  </tr>
                </table>
                </td>
            
              </tr> 
             </table>
             </ItemTemplate>

  7. #7
    L'avatar di SignIn
    SignIn non è in linea Scribacchino
    Luogo
    Milano
    Post
    1,026
    ...ciao elena ti fornisco solo alcuni consigli perchè mi sembra giusto che ti "sforzi" nel trovare l'errore:
    1)usare il debug...cioè i break point sono la manna per noi sviluppatori
    2)usare il meraviglioso watch....a cosa serve?....quando ti fermi su un break per controllare se per esempio il tuo dataset contiene delle DatTable basta selezionare la tua istanza e cliccare shift+F9(mi sa che qui si fa prima a fare un video dimostrativo )...ovviamnete puoi usarlo per qualsiasi oggetto....
    3)dai metodi ritorni delle collection di DataTable...perchè?....non ha nessun senso...i tuoi due metodi(che potresti anche unificare ma per adesso lascia così) possono ritornare le due DataTable:
    codice:
    return ds.Tables(0)
    4)ripetere il punto 1 e 2 finchè non trovi l'errore
    Ultima modifica di SignIn; 04-02-2008 19:43 

  8. #8
    perla0279 non è in linea Scolaretto
    Post
    230
    ho corretto usando come da te suggerito:
    return ds.Tables(0)

    ma comunque non riesco a sistemare questo pezzo di codice, quello relativo al Repeater.....
    Non riesco a dividere i due bind.......me ne prende solo uno in debug dicendo giustamente che:
    DataBinding: 'System.Data.DataRowView' non contiene una proprietà con nome 'Immagine'.

    e non so neanche come poterlo sistemare????

    codice:
    
    ProtectedSub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) HandlesMe.Load
    Dim dt As DataTable
    Dim dt1 As DataTable
    dt = RicTesti("006", "001")
    dt1 = RicercaProdotti("001", "001")
    Bind1(dt)
    Bind(dt1)
     
    MyRepeater.DataSource = dt1
    MyRepeater.DataSource = dt
    MyRepeater.DataBind()
    EndSub
    

  9. #9
    L'avatar di SignIn
    SignIn non è in linea Scribacchino
    Luogo
    Milano
    Post
    1,026
    ....osserva bene il codice(impara ad usare il watch è importantissimo)....sono sicuro che le tue due DataTable presentano uno schema diverso(che sò una DataTable presenta due colonne, l'altra tre, piuttosto nomi di Column diverse, tipi diversi ecc)
    Se presentano uno schema diverso perchè l'assegni allo stesso controllo?
    Perchè dico questo? Mi sembra di capire che l'assegnazione non ti è chiarissima.
    Nel tuo caso pensa ad una griglia in cui hai impostato la mappatura con i campi di una DataTable, se a questa gli passi una DataTable con uno schema differente secondo te cosa ti dirà?...si aspetta dei campi ma gli arrivano degli altri....
    ...spero di essere stato più chiaro possibile...(ricordati di fare SHIFT+F9 sugli oggetti in fase di debug)

+ Rispondi al Thread

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi