Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [vb.NET] PAssare linee di dati fra 2 textxbox

    SAlve. Chiedo scusa se il titolo non è chiarissimo ma non saprei come titolare il post.

    Ho 2 textbox, che per comodita chiamerò t1 e t2.
    In t1 ho dati per 800 linee.
    Vorrei passare i dati in t2 per elaborarli in blocchi di 200 linee.
    Come posso fare senza usare un while? esiste un metodo simile al substring?

  2. #2
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    direi che la cosa principale è identificare il carattere di accapo per spezzare le 800 righe in

    0-200ma (il duecentesimo carattere di accapo forma la prima stringa da elaborare)
    201-400ma (il quattrocentesimo carattere delimita la seconda stringa)
    401-600ma (etc...)
    601-800ma

  3. #3
    Uno split sul carattere vbcrlf? Mo provo e poi vi dico

  4. #4
    Ho sempre un while e lo split su vbcrlf non funziona

  5. #5
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Una piccola curiosità: perchè non puoi usare il ciclo while?
    Pietro

  6. #6
    su record di 30.000 linee impiega troppo.

  7. #7
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    vuoi fare una specie di paginazione? Il secondo TextBox deve venere n righe della pagina p delle righe del primo TextBox?
    Pietro

  8. #8
    Esatto, ma con una sola istruzioe. Esiste?

  9. #9
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    No. Ma puoi lavorarci con poco sforzo.
    La questione che non mi convince è il primo TextBox che contiene una enorme mole di righe. E' questo che rallenta perchè ad ogni postback devi movimentare questi dati dal client al server e viceversa.
    Io utilizzerei solo il secondo TextBox per fare vedere l'n-esima pagina, ma non il primo con tutti i dati.

    Ti mando un esempio di paginazione di un vettore di dati. Vedi se può essere utile
    codice:
    <%@ Page Language="VB" AutoEventWireup="false" CodeFile="a.aspx.vb" Inherits="prove_a" %>
    
    <!DOCTYPE html>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:TextBox ID="TextBox1" runat="server" Height="649px" TextMode="MultiLine" Width="206px"></asp:TextBox>
            <asp:TextBox ID="TextBox2" runat="server" Height="649px" TextMode="MultiLine" Width="206px"></asp:TextBox>
            
    
    
            Pagina: <asp:Label ID="Label1" runat="server" Text="" EnableViewState="false"></asp:Label>
            
    
    
            <asp:LinkButton ID="link_primapagina" runat="server" ToolTip="prima pagina" ><<</asp:LinkButton>
            <asp:LinkButton ID="link_indietro" runat="server" ToolTip="pagina precedente" ><</asp:LinkButton>
            <asp:LinkButton ID="link_avanti" runat="server" ToolTip="pagina seguente" >></asp:LinkButton>
            <asp:LinkButton ID="link_ultimapagina" runat="server" ToolTip="ultima pagina" >>></asp:LinkButton>
            
        </div>
        </form>
    </body>
    </html>
    codice:
    Option Strict On
    Imports l = libreria.ModuloWeb
    
    Partial Class prove_a
        Inherits System.Web.UI.Page
    
        Private RighePagina As Integer
        Private NumeroRecord As Integer
        Private Pagine As Integer
    
    
        Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
            Dim Pagina As Integer
    
            'simulo il caricamento di NumeroRecord righe
            NumeroRecord = 50000
    
            If Not Me.IsPostBack Then
                Dim sb As New StringBuilder()
                For i As Integer = 1 To NumeroRecord
                    sb.AppendLine(i.ToString("0000"))
                Next
                'rimuovo l'ultimo salto-pagina
                sb.Remove(sb.Length - 2, 2)
    
                'a che serve riempire questo TextBox?
                'Me.TextBox1.Text = sb.ToString
    
                'mi ricavo il vettore di righe e lo conservo nella sessione
                Dim vs As String() = sb.ToString().Split(New String() {vbNewLine}, StringSplitOptions.RemoveEmptyEntries)
                Me.Session("vs") = vs
    
                'la pagina corrente la conservo nel viewstate
                Pagina = 1
                Me.ViewState.Add("Pagina", Pagina)
    
            Else
                Pagina = CInt(Me.ViewState("Pagina"))
            End If
    
            'imposto il numero di righe per pagina
            RighePagina = 40
    
            'ricavo il numero di pagine totali
            Pagine = CInt(Math.Ceiling(CDbl(NumeroRecord) / CDbl(RighePagina)))
    
    
            If (Not Me.IsPostBack) Then Mostra(Pagina)
    
    
        End Sub
    
        Protected Sub Mostra(pagina As Integer)
            'recupero il vettore dalla session
            Dim vs As String() = CType(Me.Session("vs"), String())
    
            'mi ricavo il puntatore inizio del vettore
            Dim inizio As Integer = (pagina - 1) * RighePagina
            'ricavo la lunghezza delle righe da unire (join)
            Dim length As Integer = Math.Min(RighePagina, vs.Length - inizio)
    
            If pagina = 1 Then
                Me.link_avanti.Enabled = True
                Me.link_ultimapagina.Enabled = True
                Me.link_primapagina.Enabled = False
                Me.link_indietro.Enabled = False
    
            ElseIf pagina < Me.Pagine Then
                Me.link_avanti.Enabled = True
                Me.link_ultimapagina.Enabled = True
                Me.link_primapagina.Enabled = True
                Me.link_indietro.Enabled = True
    
            ElseIf pagina = Me.Pagine Then
                Me.link_avanti.Enabled = False
                Me.link_ultimapagina.Enabled = False
                Me.link_primapagina.Enabled = True
                Me.link_indietro.Enabled = True
    
            End If
    
            Me.Label1.Text = pagina.ToString
    
            'unisco le length righe del vettore vs partendo da inizio tramite il saltopagina
            Me.TextBox2.Text = String.Join(vbCrLf, vs, inizio, length)
    
        End Sub
    
    
        Protected Sub link_primapagina_Click(sender As Object, e As EventArgs) Handles link_primapagina.Click
            Mostra(1)
            Me.ViewState("Pagina") = 1
        End Sub
    
        Protected Sub link_ultimapagina_Click(sender As Object, e As EventArgs) Handles link_ultimapagina.Click
            Mostra(Me.Pagine)
            Me.ViewState("Pagina") = Me.Pagine
        End Sub
    
        Protected Sub link_avanti_Click(sender As Object, e As EventArgs) Handles link_avanti.Click
            Dim Pagina As Integer = CInt(Me.ViewState("Pagina"))
            If Pagina < Me.Pagine Then
                Pagina += 1
            End If
            Me.ViewState("Pagina") = Pagina
            Mostra(Pagina)
    
        End Sub
    
        Protected Sub link_indietro_Click(sender As Object, e As EventArgs) Handles link_indietro.Click
            Dim Pagina As Integer = CInt(Me.ViewState("Pagina"))
            If Pagina > 1 Then
                Pagina -= 1
            End If
            Me.ViewState("Pagina") = Pagina
            Mostra(Pagina)
    
        End Sub
    End Class
    Pietro

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 © 2026 vBulletin Solutions, Inc. All rights reserved.