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

    [VB.NET] DtaTable: inserimento riga in posizione specifica (2!)

    Ritorno su un problema che vi avevo già proposto in precedenza.
    http://forum.html.it/forum/showthrea...ight=DataTable

    Pensavo di aver trovato la soluzione, ma solo adesso mi accorgo che non funziona...

    Allora , riesumiamo il codice:

    codice:
    Private Sub inserisciRiga_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles inserisciRiga.Click
       Dim numeroDiRigaTemp As Integer = DataGrid1.CurrentCell.RowNumber() + 1
       Dim laNuovaRiga As DataRow = miaDataTable.NewRow()
       miaDataTable.Rows.InsertAt(laNuovaRiga, numeroDiRigaTemp)
       miaDataTable.AcceptChanges()
    End Sub
    L'evento generato da questo pulsante mi inserisce correttamente una riga in posizione specifica.
    Il problema è che, quando vado ad inserire valori in questa riga e successivamente seleziono un'altra riga, mi sballa tutto!
    Vi mostro due strutture indicative per spiegare il problema:

    Cod. Articolo
    --------------------
    12 Mele
    13 Carote
    --------------------

    Quindi, mi posiziono sulla riga 12, genero l'evento per l'inserimento di una nuova riga ed ecco cosa accade:

    Cod. Articolo
    --------------------
    12 Mele

    13 Carote
    --------------------

    Si è creata una nuova riga tra le mele e le pere.
    Adesso la riempio:

    Cod. Articolo
    --------------------
    12 Mele
    14 Insalata
    13 Carote
    --------------------

    Ok, ho riempito la seconda riga e mi trovo sulla SECONDA COLONNA (Articolo) della seconda riga. Premo il tasto "Tab" ed ecco cosa succede:

    Cod. Articolo
    --------------------
    12 Mele

    13 Carote
    14 Insalata
    --------------------

    Perchè mi sposta ciò che ho inserito alla fine?
    Lasciandomi oltretutto bianca la riga che avevo inserito?

    Vi ringrazio in anticipo.
    Nicola Baldi <% Naighes %>
    Il mio blog!

    "Non hai veramente capito qualcosa fino a quando non sei in grado di spiegarlo a tua nonna."

  2. #2

    Re: [VB.NET] DtaTable: inserimento riga in posizione specifica (2!)

    Originariamente inviato da naighes
    Ritorno su un problema che vi avevo già proposto in precedenza.
    a chi che discussione almeno metti il link
    Vascello fantasma dei mentecatti nonchè baronetto della scara corona alcolica, piccolo spuccello di pezza dislessico e ubriaco- Colui che ha modificato l'orribile scritta - Gran Evacuatore Mentecatto - Tristo Mietitore Mentecatto chi usa uTonter danneggia anche te

  3. #3
    Ragazzi, avrei trovato una soluzione in questa pagina:

    http://www.dotnet247.com/247referenc...20/103272.aspx


    Il problema è che il frammento di codice che mi interessa non è in Visual Basic.
    Se qualcuno fosse in grado di "Tradurlo", sarebbe davvero molto utile.
    Ciò che mi risulta particolarmente oscuro è quel "This"...
    A quale oggetto è riferito?
    Comunque, vi mostro il codice:

    codice:
    DataView dv = ((CurrencyManager) this.BindingContext[grid.DataSource, grid.DataMember]).List as DataView;
    dv.RowStateFilter = DataViewRowState.None;
    dv.RowStateFilter = DataViewRowState.CurrentRows;
    Nicola Baldi <% Naighes %>
    Il mio blog!

    "Non hai veramente capito qualcosa fino a quando non sei in grado di spiegarlo a tua nonna."

  4. #4
    Ok, questo è il nuovo frammento di codice:

    codice:
    Private Sub inserisciRiga_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles inserisciRiga.Click 
      Dim rowNumber As Integer = dGrid.CurrentCell.RowNumber() + 1 
      Dim myNewRow As DataRow = myDataTable.NewRow() 
      myDataTable.Rows.InsertAt(myNewRow, rowNumber) 
      myDataTable.AcceptChanges() 
    
      'Now, the code added to th event of my button 
      Dim myCurrencyManager As CurrencyManager 
      myCurrencyManager = CType(Me.BindingContext(dGrid.DataSource, dGrid.DataMember), CurrencyManager) 
      Dim myDataView As DataView = myCurrencyManager.List 
    
      myDataView.RowStateFilter = DataViewRowState.None 
      myDataView.RowStateFilter = DataViewRowState.CurrentRows 
    End Sub
    Dovrebbe essere corretto...
    Il fatto è che continua a darmi lo stesso problema.
    Nicola Baldi <% Naighes %>
    Il mio blog!

    "Non hai veramente capito qualcosa fino a quando non sei in grado di spiegarlo a tua nonna."

  5. #5
    Faccio un ultimo appello!
    Cerchiamo di capire bene la situazione...

    Io inserisco una nuova riga in una posizione specifica dell'oggetto DataTable.
    Ora, a quanto ho carpito dalle parole di Malcolm Stewart, (supporto di mamma microsoft), la chiamata del metodo insertAt non dovrebbe avere influenza su ciò che viene visualizzato dal mio DataGrid.

    Ciò è attribuibile al fatto che un DataGrid non è mai "agganciato" direttamente ad un oggetto DataTable, ma bensì ad un oggetto DataView!

    La soluzione che quest'individuo propone è di:

    1) Aggiungere la riga al mio oggetto DataTable
    2) Ricostruire il DataView
    3) "Riagganciare" il DataGrid

    Ora, per quanto riguarda l'operazione numero "1" siamo tutti daccordo.
    Le restanti operazioni mi risultano particolarmente ostiche per il seguente motivo:

    Come faccio a ottenere il precedente oggetto DataView? (quello che esisteva PRIMA di aver effettuato l'inserimento di riga, ovvero quello che mi viene automaticamente creato quando "Bindo", correggetemi se sbaglio)

    Ragazzi, sono veramente disperato!
    Non so davvero come levarci le gambe!

    Vi ringrazio ancora per l'attenzione.
    Nicola Baldi <% Naighes %>
    Il mio blog!

    "Non hai veramente capito qualcosa fino a quando non sei in grado di spiegarlo a tua nonna."

  6. #6
    Utente di HTML.it L'avatar di biste
    Registrato dal
    Apr 2001
    Messaggi
    877
    Prova facendo:

    codice:
    DataView dv = new System.Data.DataViewManager().CreateDataView(myDataTable);
    E poi impostare dv come nuova sorgente dati del DataGrid.

    HTH
    UGIdotNET
    Microsoft .NET MCAD
    C++, C#, VB6, VB.NET, ASP, ASP.NET
    SQL Server 2000

  7. #7
    Ho "tradotto" il tuo blocco di codice in VB (spero di non aver commesso errori...):

    codice:
    Dim mioDataViewManager As New DataViewManager(mioDataSet)
    Dim ilMioDataView As DataView = mioDataViewManager.CreateDataView(tabellaDatiDocumento)
    DataGrid1.DataSource = ilMioDataView
    Inizialmente avevo omesso il DataSet per il costruttore dell'oggetto DataViewManager, ma mi restituiva un eccezione.

    Comunque, anche in questo caso, proprio non ne vuole sapere di funzionare! Ma a te, ti sembra possibile che alla Microsoft non abbiano previsto un comportamento del genere?

    Ti ringrazio per l'interessamento.
    Nicola Baldi <% Naighes %>
    Il mio blog!

    "Non hai veramente capito qualcosa fino a quando non sei in grado di spiegarlo a tua nonna."

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.