nienteposta
16-03-2013, 13:48
Buondì,
nelle form gestire le datagrid era decisamente più semplice, con Wpf la situazione si complica.
Io ho questo codice xaml
<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:
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", "segreteriamaxmedicalgroup@gmail.com", "stmp.gmail.com", "valerio.bignardi@maxmedicalgroup.com", "smtp.gmail.com", "maxmedicalgroup1", "", "", "");
}
finally
{
SQLConnection.Close();
}
return SchedaTerapiaCol;
}
e lo assegno alla datagrid in questo modo:
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 ?
nelle form gestire le datagrid era decisamente più semplice, con Wpf la situazione si complica.
Io ho questo codice xaml
<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:
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", "segreteriamaxmedicalgroup@gmail.com", "stmp.gmail.com", "valerio.bignardi@maxmedicalgroup.com", "smtp.gmail.com", "maxmedicalgroup1", "", "", "");
}
finally
{
SQLConnection.Close();
}
return SchedaTerapiaCol;
}
e lo assegno alla datagrid in questo modo:
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 ?