我要做的就是使用名为Inventory
的本地SQL Server数据库中的项填充DataGrid。我没有收到任何错误,但我的表格是空白的。
仅供参考:Inventory
数据库有一个名为Item
的表格,其中包含ItemNumber
,Name
,Cost
和QuantityOnHand
列。 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);
}
}
}
答案 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();
}
希望有所帮助!