2017-08-24 3 views
0

désolé de demander mais j'ai besoin d'aide. J'essaie de charger des données de ma datatable vers une grille de données wpf. Actuellement, je fais comme ça: XAMLComment charger correctement Sql Server 2016 dans un datagrid wpf?

<DataGrid Height="362" Width="auto" Name="grdAngebote" SelectionMode="Single" SelectionUnit="Cell" CanUserResizeColumns="True" CanUserReorderColumns="True" CanUserSortColumns="True"AlternatingRowBackground="LightGray" AlternationCount="2" RowEditEnding="grdAngebote_RowEditEnding"/> 

cs

private void fillDatagrid() 
     { 
      sqlQuery = string.Empty; 
      using (sqlcon = new SqlConnection(sqlConString)) 
      { 
       sqlQuery = "Select ID, Angebotsnummer, Kundenname, Bauvorhaben, KundenstatusID as 'Kundenstatus', AquisekanalID as 'Aquisekanal', Ansprechpartner, AusführungszeitraumID as 'Ausführungszeitraum/Quartal', Auftragssumme, Zuschlagswahrscheinlichkeit as '%', KalkSumme, AngebotsstatusID as 'Angebotsstatus', Absagegrund From Angebote;"; 
       sqlcmd = new SqlCommand(sqlQuery, sqlcon); 
       sqlda = new SqlDataAdapter(sqlcmd); 
       dt = new DataTable("Angebote"); 
       sqlda.Fill(dt); 
       grdAngebote.ItemsSource = dt.DefaultView; 
       string sum; 
       sum = getSum(); 
       sqlcon.Close(); 
       Summe.Content = sum; 
      } 
     } 

Quelques informations supplémentaires:

private SqlConnection sqlcon; 
private SqlCommand sqlcmd; 
private SqlDataAdapter sqlda; 
private DataTable dt; 

Cela fonctionne pour moi, mais dans tous les exemples sur le i Internet voir qu'ils utilisent {Binding ...} pour voir si certaines données dans la grille ont changé ou quelque chose comme ça sinon il est très difficile d'obtenir par exemple changé les données d'une cellule et mettre à jour à ma base de données SQL Server. Donc, je voudrais mettre à jour mon programme et utiliser également des liaisons, mais comment?

Je serais reconnaissant pour toute sorte d'aide ou de conseils. Merci d'avance et bonne journée!

+0

Un très grand sujet à couvrir . Jetez un oeil à la commande de relais: http://www.c-sharpcorner.com/UploadFile/20c06b/icommand-and-relaycommand-in-wpf/ La liaison dont vous parlez est la liaison à une propriété, que vous pouvez Puis, manipuler au besoin. – Leonidas199x

+0

Vous n'avez pas besoin de lier si un objet possède une propriété ItemSource ou DataSource. – jdweng

+0

merci les gars pour les réponses rapides! Je sais que ce sujet est assez gros. Donc, si je n'ai pas besoin de fixations, comment puis-je obtenir des valeurs modifiées, par exemple? après l'événement Roweditending? je l'ai essayé comme ceci: if (e.EditAction == DataGridEditAction.Commit) { Angebot a = new Angebot(); a = e.Row.Item en tant qu'Angebot; si (a! = Nul) { MessageBox.Show (a.Kundenname); } } Ai-je manqué quelque chose parce que mon objet est toujours NULL. –

Répondre

1

Créer une classe de modèle de vue initialisant et expose les données que vous souhaitez lier:

public class ViewModel 
{ 
    public ViewModel() 
    { 
     fill(); 
    } 

    private void fill() 
    { 
     sqlQuery = string.Empty; 
     using (sqlcon = new SqlConnection(sqlConString)) 
     { 
      sqlQuery = "Select ID, Angebotsnummer, Kundenname, Bauvorhaben, KundenstatusID as 'Kundenstatus', AquisekanalID as 'Aquisekanal', Ansprechpartner, AusführungszeitraumID as 'Ausführungszeitraum/Quartal', Auftragssumme, Zuschlagswahrscheinlichkeit as '%', KalkSumme, AngebotsstatusID as 'Angebotsstatus', Absagegrund From Angebote;"; 
      sqlcmd = new SqlCommand(sqlQuery, sqlcon); 
      sqlda = new SqlDataAdapter(sqlcmd); 
      dt = new DataTable("Angebote"); 
      sqlda.Fill(dt); 
      DataView = dt.DefaultView; 

      string sum; 
      Sum = getSum(); 
      sqlcon.Close(); 
     } 
    } 

    public DataView DataView { get; private set; } 
    public string Sum { get; private set; } 
} 

Réglez le DataContext de la fenêtre à une instance de la classe modèle de vue:

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
     DataContext = new Window31ViewModel(); 
    } 
} 

Lier aux propriétés du modèle de vue dans votre modèle XAML:

<DataGrid Name="grdAngebote" ItemsSource="{Binding DataView} " .../> 
... 
<Label x:Name="Summe" Content="{Binding Sum}" />