Newsgroup: it.comp.lang.visual-basic
Titolo: Popolare DataGrid con classe

Buongiorno a tutti
Vb10 express
Lo scopo è di rimpiere la datagrid con i dati della classe persone
ma personalizzando le colonne della datagrid
NON voglio usareil parametro AutoGenerateColumns = True
Questo è il poco che sono riuscita a combinare
 
Ho una classe ( la classica persone )
Public Class persone
    Private m_FirstName As String
    Public Property FirstName() As String
        Get
            Return m_FirstName
        End Get
        Set(ByVal value As String)
            m_FirstName = value
        End Set
    End Property
    Private m_LastName As String
    Public Property LastName() As String
        Get
            Return m_LastName
        End Get
        Set(ByVal value As String)
            m_LastName = value
        End Set
    End Property
    Sub New()
 
    End Sub
    Sub New(cfirstName As String, clastname As String)
        m_FirstName = cfirstName
        m_LastName = clastname
    End Sub
End Class
 
Nella Form:
       Dim p As New List(Of persone)
        p.Add(New persone("Mario", "Rossi"))
        p.Add(New persone("Anna", "Mico"))
        dgv.DataSource = p
	dgv.Columns(0).HeaderText = "Nome"
	dgv.Columns(0).HeaderText = "Cognome"
 
Ma se volesse far vedere solo un campo come devo fare?
ho provato con
 
With dgv
	.AutoGenerateColumns = False
        .Columns.Add("firstname", "firstname")
        .DataSource = p
End With
Non da' errori, la datagrid viene visualizzata con un solo campo
ma è VUOTA....
 
 
Simoma
 
 
 
 

On Fri, 10 Feb 2012 15:16:07 +0100, Simona <sim...@hotmail.xx> wrote:
 
Ho risolto con questo
http://www.switchonthecode.com/tutorials/csharp-tutorial-binding-a-datagridview-to-a-collection
 
 
 
ficoooo


Io lavorerei un pò di XAML e poi assegnerei la List (o ancora meglio una ObservableCollection) alla DataGrid.
 
Ti incollo un esempio di codice da un mio programma. 
 
XAML:
 
<DataGrid Name="DGSottosistemi"  AutoGenerateColumns="False">
 <DataGrid.Columns>
                    <DataGridTemplateColumn Width="31">
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <Grid HorizontalAlignment="Center">
                                    <Image Source="{Binding Icona}" Width="16" Height="16"/>
                                </Grid>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>
                    <DataGridTextColumn Header="Sottosistema" x:Name="gvcSottosistema"
                                        Binding="{Binding  NomeSottosistema}" 
                                        Width="Auto"/>
                    <DataGridTextColumn Header="Banca" x:Name="gvcBanca"
                                        Binding="{Binding  Banca}" 
                                        Width="Auto" />
                    <DataGridTextColumn Header="Ultima Data Caricata" x:Name="gvcUltimaDataRif"
                                        Binding="{Binding  UltimaDataRif}"
                                        Width="Auto" />
                    <DataGridTextColumn Header="File Input" x:Name="gvcFileInput"
                                        Binding="{Binding  FileInput}"
                                        Width="Auto"/>
                    <DataGridTextColumn Header="Percorso" x:Name="gvcPercorso"
                                        Binding="{Binding  Percorso}"
                                        Width="Auto"/>
                </DataGrid.Columns>
</DataGrid>
 
Code Behind:
 
DGSottosistemi.ItemsSource = MiaList (o una ObservableCollection)
 
Nicola
 

Ah, a proposito, ho dato per scontato che lavorassi con WPF.
Stai lavorando con WPF o Windows Forms?
 
Nicola
 


grazie mille del suggerimento
la ObservableCollection non la conoscevo ma in pratica mi sembra che
sia la versione nativa che il tizio dell'esempio qui sotto aveva già
realizzato in forma più o meno manuale
http://www.switchonthecode.com/tutorials/csharp-tutorial-binding-a-datagridview-to-a-collection
 
 
Io attualemente lavoro in Windows Form
ed ho adattato così il tuo codice
 
 Dim coll As New ObservableCollection(Of CarCar)
        coll.Add(New CarCar("fiat", "topolino", "1942"))
        coll.Add(New CarCar("fiat", "punto", "1975"))
 
        _dgCars2.AutoGenerateColumns = False
 
        Dim makeColumn As DataGridViewTextBoxColumn = New
DataGridViewTextBoxColumn
        With makeColumn
            .DataPropertyName = "Make"
            .HeaderText = "Costruttore"
        End With
        Dim modelColumn As DataGridViewTextBoxColumn = New
DataGridViewTextBoxColumn
        With modelColumn
            .DataPropertyName = "Model"
            .HeaderText = "Modello"
        End With
        _dgCars2.Columns.Add(makeColumn)
        _dgCars2.Columns.Add(modelColumn)
 
        _dgCars2.DataSource = coll
 
 
CarCar è una semplicissima classe ( sempre del tizio dell'esempio)
dgCars2 è la mia DataGridView
 
 
Che ne dici?
 
ciao e grazie
 
 
 
 
Public Class CarCar
    Private _make As String
    Private _model As String
    Private _year As Integer
 
    Public Sub New(make As String, model As String, year As Integer)
        _make = make
        _model = model
        _year = year
    End Sub
 
    Public Property Make() As String
        Get
            Return _make
        End Get
        Set(value As String)
            _make = value
        End Set
    End Property
 
    Public Property Model() As String
        Get
            Return _model
        End Get
        Set(value As String)
            _model = value
        End Set
    End Property
 
    Public Property Year() As Integer
        Get
            Return _year
        End Get
        Set(value As Integer)
            _year = value
        End Set
    End Property
End Class
 
 

On Mon, 13 Feb 2012 09:52:42 +0100, Simona <sim...@hotmail.xx> wrote:
 
che ne dici Nicola?


 Che ne dici?
 
Si, ad occhio mi sembra che sia tutto ok.
Purtroppo con Windows Forms non hai il controllo che XAML ti da in WPF.
 
Nicola


vabbè.....
ancora WPF è troppo lontano
 
ciao e grazie
Simona