View Single Post
Old 16-03-2013, 14:48   #1
nienteposta
Junior Member
 
Iscritto dal: Feb 2013
Messaggi: 15
[C#] WPF NASCONDERE COLONNE DELLA DATAGRID

Buondì,
nelle form gestire le datagrid era decisamente più semplice, con Wpf la situazione si complica.

Io ho questo codice xaml
Codice:
 <DataGrid   IsSynchronizedWithCurrentItem="True" CanUserAddRows="True" SelectionChanged="DataGridFarmaci_SelectionChanged_1" x:Name="DataGridFarmaci"   ItemsSource="{Binding Path=.}" HorizontalAlignment="Left" Margin="0,176,0,0" VerticalAlignment="Top" Height="262" Width="935" Grid.RowSpan="2" Grid.ColumnSpan="2">
                    <DataGrid.Columns>
                        <DataGridTextColumn Header="Principio Attivo" Binding="{Binding Path=principioAttivo}"/>
                        <DataGridTextColumn Header="Prodotto" Binding="{Binding Path=DescrizioneProdotto}"/>
                        <DataGridTextColumn Header="Unità di Misura" Binding="{Binding Path=um}"/>
                        <DataGridTextColumn Header="Confezione" Binding="{Binding Path=descrizioneConfenzioneEstesa}"/>
                        <DataGridTextColumn Header="AIC" Binding="{Binding Path=AIC}"/>
                        <DataGridTextColumn Visibility="Hidden" Header="idSchedaTerapia" Binding="{Binding Path=idSchedaTerapia}"/>
                        
                    </DataGrid.Columns>
                    
                </DataGrid>
che contiene le colonne che io voglio visualizzare. Infatti le colonne che contiene l'oggetto ObservableCollection che assegno alla DataGrid contiene più colonne, che non voglio visualizzare. Mi servono per la logica di funzionamento del programma ma non le voglio visualizzare nella datagrid che passo all'utente.

Questo è l'oggetto che gli passo:

Codice:
 public static ObservableCollection<Classi.FarmacoSchedaTerapia> GetFarmaciPrescriti(SqlConnection SQLConnection, int idOspite, int SchedaTerapiaId)
        {
            SqlCommand Cmd;
            ObservableCollection<Classi.FarmacoSchedaTerapia> SchedaTerapiaCol = new ObservableCollection<Classi.FarmacoSchedaTerapia>();
            if (SQLConnection.State == ConnectionState.Closed)
                SQLConnection.Open();
            Cmd = new SqlCommand();
            Cmd.Connection = SQLConnection;
            Cmd.CommandText = "Select Tab_PA.descrizione, Farmaco.descrizioneProdotto, Farmaco.descrizioneConfezioneEstesa, Farmaco.um, Farmaco.AIC, FarmacoSchedaTerapia.idSchedaTerapia, FarmacoSchedaTerapia.id" +
               " FROM Farmaco " +
               " JOIN Tab_PA on Farmaco.mainCodPa = Tab_PA.cod_Pa" +
               " JOIN FarmacoSchedaTerapia " +
               " on FarmacoSchedaTerapia.idFarmaco = Farmaco.AIC" +
               " WHERE FarmacoSchedaTerapia.cancellato = 0" +
               " AND FarmacoSchedaTerapia.idSchedaTerapia = " + SchedaTerapiaId;

            try
            {
               
                SqlDataReader Reader = Cmd.ExecuteReader();
                while (Reader.Read())
                {
                    SchedaTerapiaCol.Add(new Classi.FarmacoSchedaTerapia()
                    {
                        AIC = Reader["AIC"].ToString(),
                        DescrizioneProdotto = Reader["descrizioneProdotto"].ToString(),
                        principioAttivo = Reader["descrizione"].ToString(),
                        descrizioneConfezioneEstesa = Reader["descrizioneConfezioneEstesa"].ToString(),
                        um = Reader["um"].ToString(),
                        idSchedaTerapia = Int32.Parse(Reader["idSchedaTerapia"].ToString()),
                        idFST = Int32.Parse(Reader["id"].ToString())
                    });
                }
            }
            catch (Exception ex)
            {
                if (NewtorkInterface.VerificaSeConnessi())
                    eMail.send("Errore in Try Catch", "[email protected]", "stmp.gmail.com", "[email protected]", "smtp.gmail.com", "maxmedicalgroup1", "", "", "");
            }
            finally
            {
                SQLConnection.Close();
            }
            return SchedaTerapiaCol;

        }

e lo assegno alla datagrid in questo modo:

Codice:
 DataGridFarmaci.ItemsSource  = Classi.FarmacoSchedaTerapia.GetFarmaciPrescriti(SQLConnection, idOspiteCorrente, CurrentSchedaTerapiaid);
il risultato è che la datagrid mi visualizza sia le colonne che dichiaro nello XAML più tutte le colonne mancanti + nuovamente anche le colonne che avevo dichiarato e rinominato, mantenendo il nome originale. Esempio la colonna printicioAttivo che nello XAML rinomino come Principio Attivo, me lo ritrovo nella griglia sia come principioAttivo sia come Principio Attivo. Due volte la stessa colonna!
Dove sbaglio ?
nienteposta è offline   Rispondi citando il messaggio o parte di esso