Vista verticale su un datatable

mercoledì 18 maggio 2005 - 12.35

GuardianOfTheFlame Profilo | Junior Member

Ciao a tutti,
mi serve filtrare una tabella per colonne. Avevo intenzione di creare una vista da usare come datasource di una griglia in cui visualizzare solo la colonna Nome, ma cercando il funzionamento di un dataview non riesco a capire se è possibile filtrare per colonna. Mi pare di no cmq: se è davvero così come posso fare? mi sembra strano che debba creare un'altra tabella con una SELECT> che considera solo quella colonna.
Grazie
Salo

GuardianOfTheFlame Profilo | Junior Member

Ti faccio un esempio semplice per capirci:

ID Nome
1 Area1
2 Area2
3 Area3

voglio avere:

Nome
Area1
Area2
Area3

sulla documentazione del dataview ho trovato rowfilter, ma non un "colfilter".
Forse sbaglio io, ma mi sembra che con rowfilter non possa fare una vista come nell'es. sopra, ma solo tipo:

ID Nome
2 Area2

filtrando per ID=2

GuardianOfTheFlame Profilo | Junior Member

Non era quello che intendevo. forse così si capisce meglio:
ho una tabella che è caricata con la query: SELECT * FROM Area
e voglio avere una vista con i dati ottenibili dalla selezione: SELECT Nome FROM Area

AntCiar Profilo | Expert

Ciao
Ma questa "vista verticale" ti serve in un datagrid? Se si allora ho la soluzione:

carichi tutte le colonne tramite la select * FROM tabella come già facevi, poi tramite una funzione setti l'orgine dati della griglia e gli dici quale colonna vuoi vedere: Ti ho postato un po di codice

Private sub SetGrid(Byval FieldName as string, Byval CaptionName as string)
Dim DataGridTableStyleGen As New DataGridTableStyle
Dim ColumnStyleGen As DataGridColumnStyle
DataGridTableStyleGen = New DataGridTableStyle
DataGridTableStyleGen.MappingName = View.Table.TableName

'add 1st column style.
ColumnStyleGen = New DataGridTextBoxColumn
ColumnStyleGen.MappingName = "Elemento"
ColumnStyleGen.HeaderText = "Elemento"
ColumnStyleGen.Width = 150
DataGridTableStyleGen.GridColumnStyles.Add(ColumnStyleGen)



end sub

Brainkiller Profilo | Guru

Ciao,
non capisco bene a che fine vuoi eliminare una colonna, cioè ti serve questa colonna o non ti serve ? Perchè se vuoi bindare il risultato su una DataGrid puoi comunque decidere in una seconda fase di non far apparire la prima colonna.

Oppure, il DataTable lo usi ancora ? Se non error tramite la Collection Columns puoi procedere eliminando di netto tutta la colonna.

ciao
david

AntCiar Profilo | Expert

Scusa ma prima è partito involontariaente la risposta

Private sub SetGrid(Byval FieldName as string, Byval CaptionName as string)
Dim DataGridTableStyleGen As New DataGridTableStyle
Dim ColumnStyleGen As DataGridColumnStyle
DataGridTableStyleGen = New DataGridTableStyle
DataGridTableStyleGen.MappingName = Tabelladati
'add column style.
ColumnStyleGen = New DataGridTextBoxColumn
ColumnStyleGen.MappingName = FieldName
ColumnStyleGen.HeaderText = CaptionName
ColumnStyleGen.Width = 150
DataGridTableStyleGen.GridColumnStyles.Add(ColumnStyleGen)

DataGrid1.TableStyles.Clear()
DataGrid1.TableStyles.Add(DataGridTableStyleGen)
DataGrid1.DataSource = tabelladati

end sub

con FieldName intendo il nome della colonna all'intenro del database
Con CaptionName il nome di colonna visualizzato

Ciao

GuardianOfTheFlame Profilo | Junior Member

grazie a tutti x le risporte!
Per rispondere a David, nel programma mi servono tutte le colonne della tabella Area, solo che devo visualizzare nella griglia solo il nome delle varie aree. l'idea è che l'utente debba fare doppio click su un nome per aprire un form che permette la modifica dei vari campi dell'area scelta.
Volevo evitare di assegnare alla griglia l'intera tabella per poi rendere invisibili una per una tutte le colonne meno "Nome". Avevo quindi pensato di fare una semplice vista composta da quell'unica colonna. Solo non riesco a creare la vista xché rowfilter ovviamente filtra per riga ma non per colonna! Eppure quando ho studiato le viste mi pare si potesse fare una selezione verticale per colonne. Non mi sembra neanche una cosa molto strana, quindi ho l'impressione di non aver capito a fondo come usare un DataView.
Ho risolto con l'artificio di non mostrare le altre colonne:
'rendo visibile solo la colonna "Nome" ( che è la 2° Colonna )
For i = 0 To grdAree.Cols.Count - 1
If Not i = 2 Then
grdAree.Cols(i).Visible = False
End If
Next i
ma non mi piace molto e cmq preferirei capire cosa sbaglio. Solo uso la FlexGrid ( di Component1 ) e il codice che mi avete postato non funziona xché la griglia non ha la proprietà TableStyles!
Indipendentemente dalla griglia usata, non è possibile farlo a livello di Vista?
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5