C# 在WPF中绑定DataGrid。没有内容变得可见。仅创建行
我用一个datatable在Wpf中绑定了我的DataGrid。但我看不到任何数据。我可以看到在UI的网格中创建了三行,但数据不可见。我试着改变前景色和背景色。我不知道为什么会这样 任何帮助都是值得的 我的代码 代码隐藏 我试过这样做C# 在WPF中绑定DataGrid。没有内容变得可见。仅创建行,c#,wpf,data-binding,datagrid,C#,Wpf,Data Binding,Datagrid,我用一个datatable在Wpf中绑定了我的DataGrid。但我看不到任何数据。我可以看到在UI的网格中创建了三行,但数据不可见。我试着改变前景色和背景色。我不知道为什么会这样 任何帮助都是值得的 我的代码 代码隐藏 我试过这样做 dt.AsEnumerable().ToList().ForEach(i => dgvSummary.Items.Add(i)); 而且 dgvSummary.ItemsSource = dt.AsEnumerable().ToList(); XAM
dt.AsEnumerable().ToList().ForEach(i => dgvSummary.Items.Add(i));
而且
dgvSummary.ItemsSource = dt.AsEnumerable().ToList();
XAML文件
<my:DataGrid xmlns:my="http://schemas.microsoft.com/wpf/2008/toolkit"
Name="dgvSummary" ItemsSource="{Binding}" Grid.Row="1"
MinWidth="520" Height="180" HorizontalAlignment="Left"
FontSize="10" Background="#FFFEEFC8"
AutoGenerateColumns="False" SelectionUnit="Cell"
SelectionMode="Single" RowBackground="Transparent">
<my:DataGrid.Columns>
<my:DataGridTemplateColumn Header="First Name"
IsReadOnly="True">
<my:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Visibility="Visible"
Foreground="Red"
Background="Transparent"
Text="{Binding Path=First_Name}"/>
</DataTemplate>
</my:DataGridTemplateColumn.CellTemplate>
</my:DataGridTemplateColumn>
<my:DataGridTemplateColumn Header="Last Name"
IsReadOnly="True">
<my:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Foreground="Black"
Text="{Binding Path=LAST_NAME}"/>
</DataTemplate>
</my:DataGridTemplateColumn.CellTemplate>
</my:DataGridTemplateColumn>
</my:DataGrid.Columns>
</my:DataGrid>
试着在调试过程中查看输出窗口-它会告诉您是否有任何绑定错误。我需要解决同样的问题,并给出了以下示例:
DataGrid
是在XAML中创建的DataGrid
是在C#(代码隐藏)中创建的DataGrid.ItemsSource=“{Binding}”
,然后在C#中设置DataGrid.DataContext
到DataSet
对于(2)(1)的方法不起作用。相反,我跳过了设置DataGrid.DataContext
和设置DataGrid.ItemsSource=DataTable.DefaultView
。不需要数据集
以下是这两个方面的完整工作示例:
main window.xaml
<Window x:Class="DataGridTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="60" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<StackPanel Grid.Row="0">
<Button Content="Run1" Width="100" Click="RunGrid1_Click"></Button>
<Button Content="Run2" Width="100" Click="RunGrid2_Click"></Button>
</StackPanel>
<ScrollViewer Name="sv1" Grid.Row="1">
<DataGrid Name="dg1" ItemsSource="{Binding}"></DataGrid>
</ScrollViewer>
</Grid>
</Window>
MainWindow.xaml.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
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.Navigation;
using System.Windows.Shapes;
using System.Collections.ObjectModel;
using System.Data;
using System.Management.Automation;
//C:\Program Files (x86)\Reference Assemblies\Microsoft\WindowsPowerShell\v1.0\System.Management.Automation.dll
namespace DataGridTest
{
public partial class MainWindow : Window
{
string scriptText = @"$quotastat = @()
$quotastat += new-object psobject -property @{
Identity = 1
Value = '0.5GB'
IssueWarningQuota = '471860 KB'
ProhibitSendQuota = '498074 KB'
ProhibitSendReceiveQuota = '524288 KB'
}
$quotastat += new-object psobject -property @{
Identity = 2
Value = '1GB (default)'
IssueWarningQuota = '943719 KB'
ProhibitSendQuota = '996148 KB'
ProhibitSendReceiveQuota = '1048576 KB'
}
$quotastat";
public MainWindow()
{
InitializeComponent();
}
private void RunGrid1_Click(object sender, RoutedEventArgs e)
{
StringBuilder sb = new StringBuilder();
PowerShell psExec = PowerShell.Create();
psExec.AddScript(scriptText);
Collection<PSObject> results;
Collection<ErrorRecord> errors;
results = psExec.Invoke();
errors = psExec.Streams.Error.ReadAll();
DataSet ds = new DataSet();
DataTable dt = new DataTable();
foreach (PSMemberInfo member in results[0].Members)
{
if (member.MemberType == PSMemberTypes.NoteProperty)
{
dt.Columns.Add(member.Name, Type.GetType(member.TypeNameOfValue));
}
}
foreach (PSObject result in results)
{
DataRow dr = dt.NewRow();
foreach (PSPropertyInfo pi in result.Properties)
{
dr[pi.Name] = pi.Value;
}
dt.Rows.Add(dr);
}
ds.Tables.Add(dt);
dg1.DataContext = ds.Tables[0];
}
private void RunGrid2_Click(object sender, RoutedEventArgs e)
{
StringBuilder sb = new StringBuilder();
PowerShell psExec = PowerShell.Create();
psExec.AddScript(scriptText);
Collection<PSObject> results;
Collection<ErrorRecord> errors;
results = psExec.Invoke();
errors = psExec.Streams.Error.ReadAll();
DataGrid outputGrid = new DataGrid()
{
HorizontalAlignment = HorizontalAlignment.Stretch,
VerticalAlignment = VerticalAlignment.Stretch,
HorizontalScrollBarVisibility = ScrollBarVisibility.Auto,
VerticalScrollBarVisibility = ScrollBarVisibility.Auto,
};
DataTable dt = new DataTable();
foreach (PSMemberInfo member in results[0].Members)
{
if (member.MemberType == PSMemberTypes.NoteProperty)
{
dt.Columns.Add(member.Name, Type.GetType(member.TypeNameOfValue));
}
}
foreach (PSObject result in results)
{
DataRow dr = dt.NewRow();
foreach (PSPropertyInfo pi in result.Properties)
{
dr[pi.Name] = pi.Value;
}
dt.Rows.Add(dr);
}
outputGrid.ItemsSource = dt.DefaultView;
sv1.Content = outputGrid;
}
}
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Windows;
使用System.Windows.Controls;
使用System.Windows.Data;
使用System.Windows.Documents;
使用System.Windows.Input;
使用System.Windows.Media;
使用System.Windows.Media.Imaging;
使用System.Windows.Navigation;
使用System.Windows.Shapes;
使用System.Collections.ObjectModel;
使用系统数据;
使用系统、管理、自动化;
//C:\Program Files(x86)\Reference Assembly\Microsoft\WindowsPowerShell\v1.0\System.Management.Automation.dll
命名空间DataGridTest
{
公共部分类主窗口:窗口
{
字符串scriptText=@“$quotastat=@()
$quotastat+=新对象psobject-属性@{
标识=1
值='0.5GB'
IssueWarningQuota='471860 KB'
ProhibitSendQuota='498074 KB'
ProhibitSendReceiveQuota='524288 KB'
}
$quotastat+=新对象psobject-属性@{
身份=2
值='1GB(默认值)'
IssueWarningQuota='943719KB'
ProhibitSendQuota='996148 KB'
ProhibitSendReceiveQuota='1048576 KB'
}
$quotastat”;
公共主窗口()
{
初始化组件();
}
私有无效RunGrid1\u单击(对象发送者,路由目标e)
{
StringBuilder sb=新的StringBuilder();
PowerShell psExec=PowerShell.Create();
psExec.AddScript(scriptText);
收集结果;
收集错误;
结果=psExec.Invoke();
errors=psExec.Streams.Error.ReadAll();
数据集ds=新数据集();
DataTable dt=新的DataTable();
foreach(结果[0]中的PSMemberInfo成员。成员)
{
if(member.MemberType==PSMemberTypes.NoteProperty)
{
Add(member.Name,Type.GetType(member.TypeNameOfValue));
}
}
foreach(PSObject结果生成结果)
{
DataRow dr=dt.NewRow();
foreach(result.Properties中的PSPropertyInfo pi)
{
dr[pi.Name]=pi.Value;
}
dt.Rows.Add(dr);
}
ds.Tables.Add(dt);
dg1.DataContext=ds.Tables[0];
}
私有无效RunGrid2\u单击(对象发送者,路由目标e)
{
StringBuilder sb=新的StringBuilder();
PowerShell psExec=PowerShell.Create();
psExec.AddScript(scriptText);
收集结果;
收集错误;
结果=psExec.Invoke();
errors=psExec.Streams.Error.ReadAll();
DataGrid outputGrid=新DataGrid()
{
水平对齐=水平对齐。拉伸,
垂直对齐=垂直对齐。拉伸,
HorizontalScrollBarVisibility=ScrollBarVisibility.Auto,
VerticalScrollBarVisibility=ScrollBarVisibility.Auto,
};
DataTable dt=新的DataTable();
foreach(结果[0]中的PSMemberInfo成员。成员)
{
if(member.MemberType==PSMemberTypes.NoteProperty)
{
Add(member.Name,Type.GetType(member.TypeNameOfValue));
}
}
foreach(PSObject结果生成结果)
{
DataRow dr=dt.NewRow();
foreach(result.Properties中的PSPropertyInfo pi)
{
dr[pi.Name]=pi.Value;
}
dt.Rows.Add(dr);
}
outputGrid.ItemsSource=dt.DefaultView;
sv1.Content=outputGrid;
}
}
}
它不起作用,因为当你说
dgvSummary.ItemsSource = dt.AsEnumerable().ToList();
您正在绑定到IEnumerable。但是DataRow没有要将单元格绑定到的属性,例如First\u Name、Last\u Name。你需要
<TextBlock Visibility="Visible" Foreground="Red" Background="Transparent" Text="{Binding Path=[First_Name]}"/>