2016-08-17 3 views
0

Alles, was ich tun möchte, ist ein DataGrid mit Elementen aus einer lokalen SQL Server-Datenbank namens Inventory zu füllen. Ich bekomme keine Fehler, aber mein Tisch ist leer.Füllen von DataGrid mit SQL Server-Datenbank

FYI: die Inventory Datenbank hat eine Tabelle Item genannt, die ItemNumber Spalten hat, Name, Cost und QuantityOnHand. Der DataGrid-Name heißt dgInventory. Jede Hilfe wäre willkommen.

Hier ist mein XAML-Code:

<UserControl x:Class="FinalAssignment.Views.InventoryView" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:local="clr-namespace:FinalAssignment.Views" 
     mc:Ignorable="d"> 
    <Grid> 
     <DataGrid Name="dgInventory" AutoGenerateColumns="False"> 
      <DataGrid.Columns> 
       <DataGridTextColumn Header="Item Number" Binding="{Binding ItemNumber}" /> 
       <DataGridTextColumn Header="Name" Binding="{Binding Name}" /> 
       <DataGridTextColumn Header="Cost" Binding="{Binding Cost}" /> 
       <DataGridTextColumn Header="Quantity on Hand" Binding="{Binding QuantityOnHand}" /> 
      </DataGrid.Columns> 
      <DataGrid.RowDetailsTemplate> 
       <DataTemplate> 
        <TextBlock Text="{Binding Details}" Margin="10" /> 
       </DataTemplate> 
      </DataGrid.RowDetailsTemplate> 
     </DataGrid> 
    </Grid> 
</UserControl> 

mein .cs Code hier:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Data; 
using System.Windows.Documents; 
using System.Windows.Input; 
using System.Windows.Media; 
using System.Windows.Media.Imaging; 
using System.Windows.Shapes; 
using System.Data; 
using System.Data.SqlClient; 

namespace FinalAssignment.Views 
{ 
    /// <summary> 
    /// Interaction logic for InventoryView.xaml 
    /// </summary> 
    public partial class InventoryView : UserControl 
    { 
     public InventoryView() 
     { 
      InitializeComponent(); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      string strConnection = "Server=ASHLEY-PC\\SQLEXPRESS;Database=Inventory;Trusted_Connection=true"; 

      SqlConnection con = new SqlConnection(strConnection); 

      SqlCommand sqlCmd = new SqlCommand(); 
      sqlCmd.Connection = con; 
      sqlCmd.CommandType = CommandType.Text; 
      sqlCmd.CommandText = "select ItemNumber, Name, Cost, QuantityOnHand from Item"; 
      SqlDataAdapter sqlDataAdap = new SqlDataAdapter(sqlCmd); 

      DataTable dt = ((DataView)dgInventory.ItemsSource).ToTable(); 
      sqlDataAdap.Fill(dt); 
     } 
    } 
} 

Antwort

2

Sie haben zuweisen nicht die DataSource für das Grid im aktuellen Code; Es ist nicht notwendig, Kopfzeilen für das Raster zu erstellen. Es wird automatisch aus der Bindetabelle zugewiesen. Betrachten Sie die folgende Schnipsel

<DataGrid Name="dgInventory" ItemsSource="{Binding}" AutoGenerateColumns="False"> 

Und die Back-End-Code wird sein:

sqlCmd.CommandText = "select ItemNumber as Item Number, Name, Cost, QuantityOnHand as Quantity on Hand from Item"; 
SqlDataAdapter sqlDataAdap = new SqlDataAdapter(sqlCmd); 
DataTable dt = new DataTable(); 
sqlDataAdap.Fill(dt); 
dgInventory.ItemsSource = dt.DefaultView; 
+0

Vielen Dank! Anstelle von gridEmployees meinst du dgInventory? –

+0

Ja, ich habe den Beitrag aktualisiert, werfen Sie einen Blick .. Hoffe, dass es Ihr Problem lösen wird –

+0

Hmmm. Funktioniert immer noch nicht. Ich vermute es hat etwas mit meiner strConnection zu tun. Mein Servername ist ASHLEY-PC \ SQLEXPRESS. :( –

0

Sie können angeben, für Itemssource-Datenraster-Bindung in XAML wie dies stattdessen in Code hinter CS- zu tun und zuweisen geladen Attribut auf Ihre Methode Form1_Load

<Grid> 
<DataGrid Name="dgInventory" AutoGenerateColumns="False" ItemsSource="{Binding Path=MyDataBinding}" Loaded="Form1_Load" > 
     <DataGrid.Columns> 
        <DataGridTextColumn Header="Item Number" Binding="{Binding ItemNumber}" /> 
        <DataGridTextColumn Header="Name" Binding="{Binding Name}" /> 
        <DataGridTextColumn Header="Cost" Binding="{Binding Cost}" /> 
        <DataGridTextColumn Header="Quantity on Hand" Binding="{Binding QuantityOnHand}" /> 
       </DataGrid.Columns> 
       <DataGrid.RowDetailsTemplate> 
        <DataTemplate> 
         <TextBlock Text="{Binding Details}" Margin="10" /> 
        </DataTemplate> 
       </DataGrid.RowDetailsTemplate> 
       </DataGrid> 
      </Grid> 

und in Xaml.cs wie diese

01 aussehen sollte

Hoffe, dass hilft!

Verwandte Themen