Dtaset

sabato 23 marzo 2013 - 14.01
Tag Elenco Tags  VB.NET  |  .NET 3.5  |  Visual Studio 2008  |  MySQL 5.5

Mau67 Profilo | Expert

Ciao forum ho scritto un codice per popolare un dataset da 2 tabelle, dovrei riempire il dataset caricando i dati dalla prima tabella poi successivamente dovrei controllare i dati della seconda tabella e se gli id della seconda tabella corrispondoo a qualche id della prima tabella nel dataset nella colonna chk mi deve inserire una "X" alla riga corrispondente all'id e nelle colonne "Valore" e "Prima_Visita" riempire con i dati che trova nella seconda tabella sempre corrispondenti agli ID uguali a entrambi le tabelle, e poi visualizzo il tutto in una listview.
Vi posto il codice che ho scritto se qualcuno mi può dare una mano Grazie

Dim table_Cartella As DataTable = New DataTable("dt1")
Dim table_Caretlla_Paziente As DataTable = New DataTable("dt2")
Private ComDset As New DataSet
Private ComDset1 As New DataSet


Private Sub Lista_Cartella()
ConnMySQL.Open()

Dim column As DataColumn
Dim row As DataRow
column = New DataColumn()
column.DataType = System.Type.GetType("System.String")
column.ColumnName = "Chk"
table_Cartella.Columns.Add(column)
column = New DataColumn()
column.DataType = System.Type.GetType("System.Integer")
column.ColumnName = "ID"
table_Cartella.Columns.Add(column)
column = New DataColumn()
column.DataType = System.Type.GetType("System.String")
column.ColumnName = "Descrizione"
table_Cartella.Columns.Add(column)
column = New DataColumn()
column.DataType = System.Type.GetType("System.String")
column.ColumnName = "Valore"
table_Cartella.Columns.Add(column)
column = New DataColumn()
column.DataType = System.Type.GetType("System.Date")
column.ColumnName = "Prossima_Visita"
table_Cartella.Columns.Add(column)


Dim queryString_dati As String = "SELECT ID, Descrizione FROM Cartella"
Dim command_dati As New MySqlCommand(queryString_dati, ConnMySQL)
Dim reader_dati As MySqlDataReader = command_dati.ExecuteReader()
If reader_dati.HasRows Then
While reader_dati.Read()
row = table_Flussi.NewRow() 'dichiara una nuova riga
row(1) = reader_dati.GetValue(0).ToString
row(2) = reader_dati.GetValue(1).ToString
Table_Cartella.Rows.Add(row) 'aggiunge la nuova riga popolata dai dati
End While
reader_dati.Close()
command_dati.Dispose()
End If
ConnMySQL.Close()
End Sub

Private Sub Lista_Cartella_Paziente()
ConnMySQL.Open()

Dim column As DataColumn
Dim row As DataRow
column = New DataColumn()
column.DataType = System.Type.GetType("System.String")
column.ColumnName = "Chk"
table_Caretlla_Paziente.Columns.Add(column)
column = New DataColumn()
column.DataType = System.Type.GetType("System.Integer")
column.ColumnName = "ID"
table_Caretlla_Paziente.Columns.Add(column)
column = New DataColumn()
column.DataType = System.Type.GetType("System.String")
column.ColumnName = "Descrizione"
table_Caretlla_Paziente.Columns.Add(column)
column = New DataColumn()
column.DataType = System.Type.GetType("System.String")
column.ColumnName = "Valore"
table_Caretlla_Paziente.Columns.Add(column)
column = New DataColumn()
column.DataType = System.Type.GetType("System.Date")
column.ColumnName = "Prossima_Visita"
table_Caretlla_Paziente.Columns.Add(column)


Dim queryString_dati As String = "SELECT ID, Descrizione, Valore, Prossima_Visita FROM Cartella_Paziente"
Dim command_dati As New MySqlCommand(queryString_dati, ConnMySQL)
Dim reader_dati As MySqlDataReader = command_dati.ExecuteReader()
If reader_dati.HasRows Then
While reader_dati.Read()
row = table_Flussi.NewRow() 'dichiara una nuova riga
row(0) = reader_dati.GetValue(0).ToString <<<<< QUI DEVO Assegnare la "X" alla colonna Chk del datacolumn se l'id è uguale all'id della tabella precedente
row(3) = reader_dati.GetValue(2).ToString
row(4) = reader_dati.GetValue(4).ToString
table_Caretlla_Paziente.Rows.Add(row) 'aggiunge la nuova riga popolata dai dati
End While
reader_dati.Close()
command_dati.Dispose()
End If
ConnMySQL.Close()
End Sub

Private Sub Popola_Listview()
Try
Dim itm As ListViewItem
For Each row As DataRow In table_Cartella.Rows

itm = ListView1.Items.Add(row(0).ToString)
itm.SubItems.Add(row(1).ToString)
itm.SubItems.Add(row(2).ToString)
itm.SubItems.Add(row(3).ToString)
itm.SubItems.Add(row(4).ToString)
Next

For Each row As DataRow In table_Caretlla_Paziente.Rows

itm = ListView1.Items.Add(row(0).ToString)
itm.SubItems.Add(row(1).ToString)
itm.SubItems.Add(row(2).ToString)
itm.SubItems.Add(row(3).ToString)
itm.SubItems.Add(row(4).ToString)

Next
Catch ex As Exception
MsgBox(ex.Message)
End Try

End Sub
Mau67

AntCiar Profilo | Expert

La cosa più veloce che mi viene in mente è utilizzare una Lista di stringhe in cui ci metti al primo giro (sulla tabella 1) il valore del tuo campo da controllare.

Poi quando popoli la seconda tabella controlli se il tuo id è presente nella lista e ti regoli di conseguenza.
Cristian Barca

Mau67 Profilo | Expert

infatti la prima tabella carica la lista e la seconda carica i dati che mi interessano cosa devo fare una IF?
come dico di mettere la "X" nella chk corrispondente?

Mau67

AntCiar Profilo | Expert

"La cosa più veloce che mi viene in mente è utilizzare una Lista di stringhe in cui ci metti al primo giro (sulla tabella 1) il valore del tuo campo da controllare."


Dim aaaaa as Generic.List(Of string) = new Generic.List(Of string)()

nel ciclo che carica la prima tabella ci metti

aaaaa.Add("valore di Id da controllare successivamente")



poi quando carichi la seconda tabella:

if aaaaa.Contains("valore di Id da controllare)
.... metti la X al campo
end if
Cristian Barca

Mau67 Profilo | Expert

provo e poi ti faccio sapere intanto grazie
Mau67

Mau67 Profilo | Expert

Ok cristian ho bisogno di te ho fatto come mi hai detto ma evidentemente sbaglio qualcosa perchè mi carica la prima tabella poi la seconda tabella mi accoda i dati alla prima tabella ti posto il codice puoi correggerlo perfavore grazie tante

Private Sub Lista_Cartella()
Connection.Open()

Dim column As DataColumn
Dim row As DataRow
column = New DataColumn()
column.DataType = System.Type.GetType("System.String")
column.ColumnName = "Chk"
table_Cartella.Columns.Add(column)
column = New DataColumn()
column.DataType = System.Type.GetType("System.String")
column.ColumnName = "ID"
table_Cartella.Columns.Add(column)
column = New DataColumn()
column.DataType = System.Type.GetType("System.String")
column.ColumnName = "Descrizione"
table_Cartella.Columns.Add(column)
column = New DataColumn()
column.DataType = System.Type.GetType("System.String")
column.ColumnName = "Valore"
table_Cartella.Columns.Add(column)
column = New DataColumn()
column.DataType = System.Type.GetType("System.String")
column.ColumnName = "Prossima_Visita"
table_Cartella.Columns.Add(column)

Dim queryString_dati As String = "SELECT ID, Denominazione FROM accertamenti_sanitari"
Dim command_dati As New MySqlCommand(queryString_dati, Connection)
Dim reader_dati As MySqlDataReader = command_dati.ExecuteReader()
If reader_dati.HasRows Then
While reader_dati.Read()
row = table_Cartella.NewRow() 'dichiara una nuova riga
AssociaID.Add(reader_dati.GetValue(0).ToString)
row(1) = reader_dati.GetValue(0).ToString
row(2) = reader_dati.GetValue(1).ToString
table_Cartella.Rows.Add(row) 'aggiunge la nuova riga popolata dai dati

End While


reader_dati.Close()
command_dati.Dispose()
End If
Connection.Close()
End Sub

Private Sub Lista_Cartella_Paziente()
Connection.Open()

Dim column As DataColumn
Dim row As DataRow
column = New DataColumn()
column.DataType = System.Type.GetType("System.String")
column.ColumnName = "Chk"
table_Caretlla_Paziente.Columns.Add(column)
column = New DataColumn()
column.DataType = System.Type.GetType("System.String")
column.ColumnName = "ID"
table_Caretlla_Paziente.Columns.Add(column)
column = New DataColumn()
column.DataType = System.Type.GetType("System.String")
column.ColumnName = "Descrizione"
table_Caretlla_Paziente.Columns.Add(column)
column = New DataColumn()
column.DataType = System.Type.GetType("System.String")
column.ColumnName = "Valore"
table_Caretlla_Paziente.Columns.Add(column)
column = New DataColumn()
column.DataType = System.Type.GetType("System.String")
column.ColumnName = "Prossima_Visita"
table_Caretlla_Paziente.Columns.Add(column)


Dim queryString_dati As String = "SELECT ID, ID_Cartella, Valore, Prossima_Visita FROM accertamenti_sanitari_1"
Dim command_dati As New MySqlCommand(queryString_dati, Connection)
Dim reader_dati As MySqlDataReader = command_dati.ExecuteReader()
If reader_dati.HasRows Then
While reader_dati.Read()
If AssociaID.Contains(reader_dati.GetValue(1).ToString) Then
row = table_Caretlla_Paziente.NewRow() 'dichiara una nuova riga
row(0) = "X"
row(3) = reader_dati.GetValue(2).ToString
row(4) = reader_dati.GetValue(3).ToString
table_Caretlla_Paziente.Rows.Add(row) 'aggiunge la nuova riga popolata dai dati
End If

End While

reader_dati.Close()
command_dati.Dispose()
End If
Connection.Close()
End Sub
Mau67

AntCiar Profilo | Expert

Ciao.

Da come hai scritto il codice i dati li deve inserie correttamente nelle tabelle. Poi se da qualche altra parte del codice fai lo sbaglio questo non lo possiamo sapere.

L'unico errore (almeno da come hai scritto qualche post fa) sta nel fatto che nella tabella 'table_Caretlla_Paziente' la riga la metti solo se esiste nella Lista. Se non sbaglio tu volevi che mettesse la X nel caso in cui l'ID era presente nell'altra ma la riga nella 'table_Caretlla_Paziente' ce la deve mettere comunque a prescindere. Se è così devi modificare il codice in questo modo (il codice scritto è solo una parte del codice della seconda sub)



While reader_dati.Read() row = table_Caretlla_Paziente.NewRow() 'dichiara una nuova riga row(0) = "" If AssociaID.Contains(reader_dati.GetValue(1).ToString) Then row(0) = "X" end if row(3) = reader_dati.GetValue(2).ToString row(4) = reader_dati.GetValue(3).ToString table_Caretlla_Paziente.Rows.Add(row) 'aggiunge la nuova riga popolata dai dati End While



Mau67 Profilo | Expert

Ciao cristian nella tabella table_Cartella ci sono queste voci:

01 Visita medica
02 Esame audiometrico
03 ECG
04 Visita oculistica
05 Emocromo
ecc.......

nella tabella table_Caretlla_Paziente inserisco solo gli accertamenti che devo far fare esempio
02 Esame audiometrico
03 ECG
adesso caricando entrambi le tabelle nel dataset dovrei ottenere questo in visualizzazione

01 Visita medica
X 02 Esame audiometrico
X 03 ECG
04 Visita oculistica
05 Emocromo
questo non avviene perchè caricanco il dataset inolonna tutto in questo modo

01 Visita medica
02 Esame audiometrico
03 ECG
04 Visita oculistica
05 Emocromo
X 02 Esame audiometrico
X 03 ECG
ripete le voci aggiungendo la X


Mau67

AntCiar Profilo | Expert

allora nella prima sub popoli la tabella 'lable_Cartella' (correttamente)

row = table_Cartella.NewRow() 'dichiara una nuova riga AssociaID.Add(reader_dati.GetValue(0).ToString) row(1) = reader_dati.GetValue(0).ToString row(2) = reader_dati.GetValue(1).ToString table_Cartella.Rows.Add(row) 'aggiunge la nuova riga popolata dai dati


Nella seconda popoli la tabella t'able_Caretlla_Paziente' (correttamente)

row = table_Caretlla_Paziente.NewRow() 'dichiara una nuova riga row(0) = "X" row(3) = reader_dati.GetValue(2).ToString row(4) = reader_dati.GetValue(3).ToString table_Caretlla_Paziente.Rows.Add(row)


ora se ti trovi i dati accodati vuol dire che l'errore lo fai da qualche altra parte.
Io posso dirti che da quello che leggo nelle due sub le cose sono corrette.


Cristian Barca

Mau67 Profilo | Expert

è possibile che l'errore è nella visualizzazione cioè qui?

Private Sub Popola_Listview()
Try
Dim itm As ListViewItem
For Each row As DataRow In table_Cartella.Rows

itm = ListView1.Items.Add(row(0).ToString)
itm.SubItems.Add(row(1).ToString)
itm.SubItems.Add(row(2).ToString)
itm.SubItems.Add(row(3).ToString)
itm.SubItems.Add(row(4).ToString)
Next

For Each row As DataRow In table_Caretlla_Paziente.Rows

itm = ListView1.Items.Add(row(0).ToString)
itm.SubItems.Add(row(1).ToString)
itm.SubItems.Add(row(2).ToString)
itm.SubItems.Add(row(3).ToString)
itm.SubItems.Add(row(4).ToString)

Next
Catch ex As Exception
MsgBox(ex.Message)
End Try

End Sub
Mau67

AntCiar Profilo | Expert

Beh l'errore è un po generale.

Nella visualizzazione è normale che vedi i dati in quel modo perchè prima fai un ciclo su una tabella e metti i dati, poi fai un ciclo sull'altra e accodi altri dati. E' normale che ti trovi delle righe in più.

Poi guardando il risultato che ti aspetti di vedere, è sbagliato concettualmente il modo di caricare i dati. Potresti fare tutto via database.

Questo almeno come la vedo io alla luce delle informazioni che hai dato nel post.
Cristian Barca

Mau67 Profilo | Expert

ok grazie ci sbatto un altro pò la testa spero di risolvere ciao grazie
Mau67
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5