使用SQL Server数据库填充DataGrid

时间:2016-08-17 03:32:53

标签: c# sql-server wpf

我要做的就是使用名为Inventory的本地SQL Server数据库中的项填充DataGrid。我没有收到任何错误,但我的表格是空白的。

仅供参考:Inventory数据库有一个名为Item的表格,其中包含ItemNumberNameCostQuantityOnHand列。 DataGrid名称称为dgInventory。任何帮助将不胜感激。

这是我的.xaml代码:

<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>

这是我的.cs代码:

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);
        }
    }
}

2 个答案:

答案 0 :(得分:2)

您尚未在当前代码中为网格分配DataSource;没有必要为网格创建标题它将自动从绑定表中分配。请考虑以下代码段

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

后端代码将是:

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;

答案 1 :(得分:0)

您可以像这样在xaml中为数据网格指定ItemsSource绑定,而不是在.cs后面的代码中指定,并为Form1_Load方法指定Loaded属性

    <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>

并且在Xaml.cs中应该看起来像这样

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

            SqlConnection con = new SqlConnection(strConnection);

            string query = "select ItemNumber, Name, Cost, QuantityOnHand from Item";
            SqlDataAdapter sqlDataAdap = new SqlDataAdapter(query,con );

            DataSet _Bind = new DataSet();
           _Adapter.Fill(_Bind, "MyDataBinding");

           dgInventory.DataContext = _Bind;

           con.Close();
        }

希望有所帮助!