|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Sep 2003
Messaggi: 1025
|
[vb.net] Svuotare un Datagrid
Come faccio a svuotare un datagrid???
esempio io faccio una select su un'origine dati (file mdb) sulla quale ci sono dei parametri di ricerca. La ricerca sulla tabella viene fatta tante volte e se prima di fare una nuova ricerca io non svuoto la tabella mi visualizza i record doppi sulla tabella...posto le mie righe di codice.. Dim sql As String If RbtnArticolo.Checked = True Then sql = "SELECT Articolo, [Codice Articolo], Prezzo, Descrizione FROM Articoli where Articolo= '" & txtRicerca.Text & "'" ElseIf RbtnCodArticolo.Checked = True Then sql = "SELECT [Codice Articolo], Articolo, Prezzo, Descrizione FROM Articoli where [Codice Articolo]= '" & txtRicerca.Text & "'" ElseIf RbtnPrezzo.Checked = True Then sql = "SELECT [Codice Articolo], Articolo, Prezzo, Descrizione FROM Articoli where Prezzo= '" & txtRicerca.Text & "'" End If ConnettiDb(Cn, NomeDB, "Admin", "") PopolaTabella(dsRicerca, daRicerca, Cn, sql, "TblRicerca") DgridArticoli.DataSource = dsRicerca DgridArticoli.DataMember = "TblRicerca" DisconnettiDb(Cn) io adesso dovrei svuotare l'oggetto DgridArticoli per poter effettuare una ricerca nuova, altrimenti mi si visualizzano record doppi...come faccio?? |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Sep 2003
Messaggi: 1025
|
ho risolta mettendo all'inizio della sub daArticoli.clear
Praticamente ho svuotato il dataset... lAdesso mi viene il dubbio che qualcosa resti aperto in memoria... |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Sep 2003
Messaggi: 1025
|
Sembra che in memoria non abbia più niente...quindi ok...
solo una cosa però....se io effettuo una ricerca per Articolo ovviamente mi viene fuori il record con i campi in questa sequenza come da select Articolo - Cod Articolo - Prezzo - Descrizione se io faccio un'altra ricerca sullo stesso prezzo dell'articolo ricercato prima (quello che adesso ho in visualizzazione) non mi riordina i campi in modo Prezzo - Articolo - Codice Articolo - Descrizione ma rimangono tali e quali a prima cioè Articolo - Cod Articolo - Prezzo - Descrizione qualcuno saprebbe spiegarmi il motivo?? |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Sep 2003
Messaggi: 1025
|
Faccio un'atra domanda...
Nella mia applicazione c'è la posibilità di cancellare una riga in un datagrid con queste istruzioni: Dim RemoveRow As DataRow 'assegno il valore a rowindex e quindi alla riga del datagrid selezionata. RowIndex = DgridArticoli.CurrentRowIndex 'inizializzo la datatable. TableArticoli = dsArticolo.Tables("TblArticoli") 'assegno il datarow alla tabella RemoveRow = TableArticoli.Rows(RowIndex) 'rimuovo la riga selezionata nel datagrid. 'With TableArticoli.Rows(RowIndex) ' .Item("Articolo") = "" RemoveRow.Delete() 'End With come faccio per cancellare più righe assieme???c'è una proprietà o metodo del datagrid che mi ritorni l'insieme di righe selezionate?? |
![]() |
![]() |
![]() |
#5 | |
Senior Member
Iscritto dal: Apr 2004
Città: Lariano (RM)
Messaggi: 1372
|
Re: [vb.net] Svuotare un Datagrid
Quote:
Private Sub PopolaDataGrid() ' Popola la datagrid. Dim dSet As New System.Data.DataSet Dim dTable As New System.Data.DataTable Dim dAdpt As New System.Data.OleDb.OleDbDataAdapter(sSQL, Conn) dAdpt.Fill(dSet, "NOME_DATATABLE") dtgNE.DataSource = dSet.Tables(0) lblRecordRestituiti.Text = dSet.Tables(0).Rows.Count() & " record trovati" End Sub A posto della variabile sSQL metti la tua stringa SQL; Conn rappresenta la Connection al database. Se cambi la stringa SQL e riesegui il codice la dadatagrid si aggiornerà con i nuovi record. Non devi fare il clear del DataSet, perchè cancelli tutte le righe! Ricordati poi alla fine di chiudere la connessione! Comunque, per effettuare delle ricerche o filtri all'interno di un dataset bisogna utilizzare il metodo Select e non fare ogni volta una query sulla fonte dati, altrimenti si perde il senso di lavorare con ADO.NET in modalità disconnessa.
__________________
Careful With That Axe Ultima modifica di Brigante : 21-12-2004 alle 08:59. |
|
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Apr 2004
Città: Lariano (RM)
Messaggi: 1372
|
Quote:
__________________
Careful With That Axe |
|
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Apr 2004
Città: Lariano (RM)
Messaggi: 1372
|
Quote:
![]()
__________________
Careful With That Axe |
|
![]() |
![]() |
![]() |
#8 | |
Senior Member
Iscritto dal: Sep 2003
Messaggi: 1025
|
Re: Re: [vb.net] Svuotare un Datagrid
Quote:
grazie....cosa intendi per "Utilizzare sempre ilo metodo select??mi potresti fare un esempio" cioè io non dovrei ogni volta chiudere e riaprire la connessione e fare una select quando voglio fare una ricerca?? |
|
![]() |
![]() |
![]() |
#9 | |
Senior Member
Iscritto dal: Sep 2003
Messaggi: 1025
|
Quote:
perchè io per popolare una tabella uso questa funzione: ecco perchè ogni volta specifico la stringa di connessione... Public Sub PopolaTabella(ByVal ds As Data.DataSet, ByVal da As OleDb.OleDbDataAdapter, ByVal cn As OleDb.OleDbConnection, ByVal Query As String, ByVal NomeTbl As String, Optional ByVal CaricaCommand As Boolean = True, Optional ByVal PerInnerjoin As Boolean = False) Try If cn.State = ConnectionState.Closed Then ConnettiDb(cn, NomeDB, "Admin") If cn.State = ConnectionState.Open Then da.SelectCommand = New OleDb.OleDbCommand(Query, cn) da.SelectCommand.Connection = cn da.SelectCommand.ExecuteNonQuery() da.Fill(ds, NomeTbl) 'Aggiunge un oggetto DataTable a un DataSet e configura lo schema affinché corrisponda a quello dell'origine dati da.FillSchema(ds, SchemaType.Mapped) If CaricaCommand Then Dim CmbBld As New OleDb.OleDbCommandBuilder(da) 'era per queste due istruzioni che non funzionava...access le richiede CmbBld.QuotePrefix = "[" CmbBld.QuoteSuffix = "]" da.DeleteCommand = CmbBld.GetDeleteCommand da.InsertCommand = CmbBld.GetInsertCommand da.UpdateCommand = CmbBld.GetUpdateCommand End If End If Catch err As OleDb.OleDbException MsgBox(err.Message & " " & err.ErrorCode, MsgBoxStyle.Critical, "Errore...") Finally If cn.State = ConnectionState.Open Then cn.Close() End Try End Sub io così popolo una taabella e poi non in funzione popolo il datagrid... Ultima modifica di mangzeus : 21-12-2004 alle 10:43. |
|
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Sep 2003
Messaggi: 1025
|
Grande funziona...
Private Sub PopolaDataGrid(ByVal sql As String) ' Popola la datagrid. Dim dSet As New System.Data.DataSet Dim dTable As New System.Data.DataTable Dim dAdpt As New System.Data.OleDb.OleDbDataAdapter(sql, Cn) dAdpt.Fill(dSet, "NOME_DATATABLE") DgridArticoli.DataSource = dSet.Tables(0) Label1.Text = dSet.Tables(0).Rows.Count() & " record trovati" End Sub mi faresti un esempio per usare il metodo select e quindi lavorare in modalità disconnessa?? Ultima modifica di mangzeus : 21-12-2004 alle 11:15. |
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Apr 2004
Città: Lariano (RM)
Messaggi: 1372
|
Al metodo Select devi passargli la stringa del filtro. Sto cominciando ad utilizzarlo anch'io quindi ti rimando alla MSDN Library online (in italiano) che tratta l'argomento: QUI.
__________________
Careful With That Axe |
![]() |
![]() |
![]() |
#12 | |
Senior Member
Iscritto dal: Sep 2003
Messaggi: 1025
|
Quote:
ho trovato il metodo più o meno solo che adesso non so come assegnarlo ad un datagrid io ho fatto così: Dim sql As String sql = "SELECT Articolo, [Codice Articolo], Prezzo, Descrizione FROM Articoli" ConnettiDb(Cn, NomeDB, "Admin", "") PopolaTabella(dsArticolo, daArticolo, Cn, sql, "TblArticoli") DgridArticoli.DataSource = dsArticolo DgridArticoli.DataMember = "TblArticoli" DisconnettiDb(Cn) 'dichiaro il datarow delle righe trovate Dim foundRows() As DataRow Dim i As Integer foundRows = dsArticolo.Tables("TblArticoli").Select("Articolo='a'") 'questo mi indica che ha trovato una riga quindi è giusto perche nel mio database ho una riga dove l'Articolo=a i = foundRows.Length() 'poi qui sto provando a mettere il datarow nel datagrid trasformandolo in dataset ma mi da errore, non ci riesco... Dim pippo As DataSet pippo = New DataSet pippo.Tables.Add(New DataTable("pluto")) 'pippo.Tables(0).Rows.Add() DgridArticoli.DataSource = foundRows Dim a As Integer |
|
![]() |
![]() |
![]() |
#13 | |
Senior Member
Iscritto dal: Feb 2001
Città: Kasteddu
Messaggi: 1890
|
Quote:
Inserisci nel datagrid una templatecolumn contenente un checkbox, sotto il datagrid aggungi un pulsante Elimina che per ogni riga del datagrid con il checkbox selezionato esegue il codice da te postato.
__________________
Asus P5Q-E - Intel Q6600 - Corsair 4GB DDR2 - Radeon HD5770 - Seagate 320GB sata2 16M - Audigy2 ZS Acer Aspire 3023 WLMI |
|
![]() |
![]() |
![]() |
#14 | |
Senior Member
Iscritto dal: Sep 2003
Messaggi: 1025
|
Quote:
come faccio ad inserire questa templatecolumn??potresti farmi un esempio a codice?? |
|
![]() |
![]() |
![]() |
#15 | |
Senior Member
Iscritto dal: Feb 2001
Città: Kasteddu
Messaggi: 1890
|
Quote:
__________________
Asus P5Q-E - Intel Q6600 - Corsair 4GB DDR2 - Radeon HD5770 - Seagate 320GB sata2 16M - Audigy2 ZS Acer Aspire 3023 WLMI |
|
![]() |
![]() |
![]() |
#16 | |
Senior Member
Iscritto dal: Sep 2003
Messaggi: 1025
|
Quote:
in una applicazione standard??è un casino?? |
|
![]() |
![]() |
![]() |
#17 | |
Senior Member
Iscritto dal: Feb 2001
Città: Kasteddu
Messaggi: 1890
|
Quote:
Però non ti posso aiutare ![]() Non si possono inserire le checkbox in un dg vb.net?
__________________
Asus P5Q-E - Intel Q6600 - Corsair 4GB DDR2 - Radeon HD5770 - Seagate 320GB sata2 16M - Audigy2 ZS Acer Aspire 3023 WLMI |
|
![]() |
![]() |
![]() |
#18 | |
Senior Member
Iscritto dal: Sep 2003
Messaggi: 1025
|
Quote:
non penso sai...non lo so...non ne ho idea...Avessi una proprietà del datagrid che mi ritorni il numero di righe selezionate non sarebbe un problema perchè le inserisco nel datarow e poi cancello il datarow direttamente ed è fatta. SOlo che l'unica proprietà del datagrid che mi risulta utile è la .currentrowindex ma ritorna solo una riga selezionata. |
|
![]() |
![]() |
![]() |
#19 |
Senior Member
Iscritto dal: Apr 2004
Città: Lariano (RM)
Messaggi: 1372
|
Ho trovato questa funzione, ma è da provare, restituisce una classe ArrayList.
Public Function GetSelectedRows(ByVal dg As DataGrid) As System.Collections.ArrayList Dim al As New ArrayList() Dim cm As CurrencyManager = Me.BindingContext(dg.DataSource, dg.DataMember) Dim dv As DataView = CType(cm.List, DataView) Dim i As Integer For i = 0 to dv.Count - 1 If dg.IsSelected(i) Then al.Add(i) End If End Next Return al End Function
__________________
Careful With That Axe |
![]() |
![]() |
![]() |
#20 | |
Senior Member
Iscritto dal: Sep 2003
Messaggi: 1025
|
Quote:
poi come faccio a cancellare le righe che prima utilizzavo il datarow con l'ArrayList come ci si comporta?? In Pratica come funziona questo CurrencyManager?? Ultima modifica di mangzeus : 24-12-2004 alle 08:54. |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 01:09.