我在 net 4 wpf c# 项目中绑定数据网格控件时遇到问题 抱歉,如果我发布的信息太多或不够,我永远猜不到正确的数量
这就是我所拥有的。
1.一个名为 dgCSVData 的数据网格控件,它勾选了自动生成列
我的xml是
<DataGrid ItemsSource="{Binding dgCSVData}" Name="dgCSVData" Height="283" Width="1033" IsEnabled="True" ContextMenuService.ShowOnDisabled="True" IsReadOnly="True" SelectionChanged="dgCSVData_SelectionChanged" >
<DataGrid.ContextMenu>
<ContextMenu>
<MenuItem Command="Copy">
<!--<MenuItem.Icon>
<Image Source="Images/copy.png" />
</MenuItem.Icon>-->
</MenuItem>
</ContextMenu>
</DataGrid.ContextMenu>
</DataGrid>
- 我正在将一个 csv 读入一个列表并使用该列表创建一个从我的 sql 数据库克隆的数据表。数据表在后台阅读器中创建并交回主线程。我已经循环浏览表数据行中的项目并确认数据表返回正确的信息:这是调试输出的表中的一行
年份项目:2013/14,起始项目:12/10/2013 00:00:00,到项目:18/10/2013 00:00:00,周无项目:27,时钟无项目:1139,名称项目: SINGH,初始项目:R,部门项目:1,自己小时项目:55.50,其他小时项目:0.00,总小时项目:55.50,O/T 高级项目:7.92
我使用此代码设置(或者更确切地说尝试)设置数据网格的内容
void objProgress_ValueChanged(DataTable Result,string msg)
{
//Handle the event of csv datatable ready to return
oTable = Result;
//this is just for debug
DataRow Dr = oTable.Rows[0];
foreach (var item in Dr.ItemArray)
{
System.Windows.Forms.MessageBox.Show(item.ToString());
}
//this meant to set the binding BUT DOES NOT WORK TOTALLY LAST COLUMN MISSING
this.dgCSVData.DataContext = oTable.DefaultView;
this.dgCSVData.ItemsSource = oTable.DefaultView;
tbLoadDgStat.Visibility = Visibility.Visible;
//This does some error checking
if (oTable.Rows.Count > 1)
{
if (msg.Trim().StartsWith("Warning"))
{
System.Windows.Media.Color c = Colors.Red;
this.tbLoadDgStat.Background = new SolidColorBrush(c);
System.Windows.Forms.MessageBox.Show(oTable.Rows.Count.ToString());
}
this.tbLoadDgStat.Text = msg;
progressBar1.Value = 100;
btUpload.IsEnabled = true;
}
else
{
this.tbdgImport.Text = "Error no data returned";
progressBar1.Value = 50;
}
System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.Default;
progressBar1.Visibility = Visibility.Hidden;
this.Show();
}
我收到的错误是
System.Windows.Data 错误:40:BindingExpression 路径错误:在“对象”“DataRowView”(HashCode=30297615)上找不到“O”属性。BindingExpression :Path=O/T 溢价;DataItem='DataRowView' (HashCode=30297615) ; 目标元素是 'TextBlock' (Name='') ; 目标属性是“文本”(类型“字符串”)
路径 O/T Premium 是数据表和数据网格的最后一列。它应该来自数据表中O/T Premium Item: 7.92值上方的行,这是一个小数,但正确绑定的前四个项目也是如此
我正在尝试使绑定尽可能通用,因为我希望在下一阶段的开发中将不同的 csv 文件读入数据网格
我不明白绑定问题,因为数据表中的所有其他项目都正确显示并由两行代码完成
this.dgCSVData.DataContext = oTable.DefaultView;
this.dgCSVData.ItemsSource = oTable.DefaultView;