Salut,
Je rencontre un soucis quand je souhaite ajouter des données en utilisant .Net RIA Services.
En fait, quand j'ajoute une donnée (que ce soit via un formulaire ou directement dans le code-behind, celle ci n'apparait pas dans la grille.
Pour afficher ma grille, j'utilise un Domain Data Source :
1 2 3 4 5 6 7 8 9
| <riaControls:DomainDataSource x:Name="source"
QueryName="GetLogementsQuery"
AutoLoad="True"
LoadSize="20"
>
<riaControls:DomainDataSource.DomainContext>
<domain:LogementsFichiersDomainContext />
</riaControls:DomainDataSource.DomainContext>
</riaControls:DomainDataSource> |
Ensuite, je déclare une DataGrid et un DataPager en spécifiant dans ItemsSource ceci :
ItemsSource="{Binding Data, ElementName=source}"
Les données apparaissent bien (j'ai mis quelques enregistrements par défaut dans ma classe).
Si j'essaye d'ajouter un enregistrement dans le code behind comme ceci :
1 2 3
| var context = source.DomainContext as LogementsFichiersDomainContext;
context.LogementsFichiers.Add(new LogementsFichiers() { ........ });
source.SubmitChanges(); |
Rien n'apparait de nouveau dans la DataGrid.
Pareil si je fais avec une DataForm dans une ChildWindow :
Appel de la ChildWindow :
1 2 3 4 5 6
| private void addNewLogementsFichiers_Click(object sender, RoutedEventArgs e)
{
LogementsFichiersRegistrationWindow addLgm = new LogementsFichiersRegistrationWindow();
addLgm.Closed += new EventHandler(addLgm_Closed);
addLgm.Show();
} |
Dans la ChildWindow, je met tout ce qu'il faut :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| public partial class LogementsFichiersRegistrationWindow : ChildWindow
{
public LogementsFichiersRegistrationWindow()
{
InitializeComponent();
NewLogementsFichiers = new LogementsFichiers();
AddLogementsFichierDataForm.CurrentItem = NewLogementsFichiers;
AddLogementsFichierDataForm.BeginEdit();
}
private void OKButton_Click(object sender, RoutedEventArgs e)
{
AddLogementsFichierDataForm.CommitEdit();
this.DialogResult = true;
}
private void CancelButton_Click(object sender, RoutedEventArgs e)
{
AddLogementsFichierDataForm.CancelEdit();
this.DialogResult = false;
}
public LogementsFichiers NewLogementsFichiers { get; set; }
} |
Et enfin, sur l'évenement Closed de la ChildWindow :
1 2 3 4 5 6 7 8 9 10
| void addLgm_Closed(object sender, EventArgs e)
{
LogementsFichiersRegistrationWindow lgm = (LogementsFichiersRegistrationWindow)sender;
if (lgm.NewLogementsFichiers != null)
{
LogementsFichiersDomainContext _LogementsFichiersDomainContext = (LogementsFichiersDomainContext)(source.DomainContext);
_LogementsFichiersDomainContext.LogementsFichiers.Add(lgm.NewLogementsFichiers);
source.SubmitChanges();
}
} |
Mais là encore, rien n'apparait.
Pour tester, j'ai ajouté ceci dans le constructeur de ma feuille principale :
1 2 3
| LogementsFichiersDomainContext _LogementsFichiersDomainContext = (LogementsFichiersDomainContext)(source.DomainContext);
_LogementsFichiersDomainContext.Load(_LogementsFichiersDomainContext.GetLogementsQuery());
GrilleLogements.ItemsSource = _LogementsFichiersDomainContext.LogementsFichiers; |
En gros, j'ai remis le code qui est normalement executé en XAML avec le DomainDataSource.
Et maintenant, si j'ajoute une donnée, elle apparait bien à la suite des autres.
Mais bon, il y a deux problèmes :
- Déjà, je trouve ça dommage de devoir remettre ces lignes de code dans le constructeur de la page alors que j'ai un Domain Data Source dans mon code XAML.
- Ensuite, les données qui apparaissent dans la grille ne respectent pas du tout mon système de pagination. En gros, tout apparait dans une seule et unique page. C'est un peu dommage.
En résumé, je souhaite pouvoir ajouter des données et que celles ci apparaissent dans ma DataGrid sans avoir à bidouiller dans le code behind et que ça conserve mes règles de pagination (15 éléments par page par exemple).
Ce problème vous évoque-t'il quelque chose ?
Ps : Mes données ne sont pas issues d'une BDD pour info. C'est juste une classe avec une liste qui j'ai initialisé avec quelques données.
Merci.
Partager