【发布时间】:2016-10-20 21:20:28
【问题描述】:
我正在使用 C# 和 XAML 创建一个显示来自数据库的信息的对话框。窗户或多或少地按照应有的方式运行。初始化后,数据库数据会适当地填充DataGrid。
如您所见,还有一个ComboBox 用于过滤DataGrid 的内容。它有点这样做。当我从ComboBox 中选择所需的项目时,它会过滤我的数据库,并创建一个包含所有数据的选定对象类型的List<>。我遇到的问题是无法找到用来自List<> 的数据填充临时表以填充DataGrid 的方法。最终发生的事情是这样的:
数据库中的元素有正确的行数,当我运行它时,所有正确的数据都在List<>中;但数据没有显示在行中。
我无法在数据库中为结果创建一个新表,因为 DataGrid 的数据绑定将不起作用;我已经尝试通过帮助类使用来自List<> 的信息重新填充表格...无法弄清楚。
任何想法和/或帮助都会很棒。
这里是我可以发布的尽可能多的代码: XML数据绑定(绑定路径与数据库中的列一致):
<DataGridTextColumn Header="Size" Binding="{Binding Path=ItemSize }"/>
<DataGridTextColumn Header="Elbow" Binding="{Binding Path=Ell}"/>
<DataGridTextColumn Header="Tee" Binding="{Binding Path=Tee}"/>
<DataGridTextColumn Header="Long-Turn Elbow" Binding="{Binding Path=LngEl}"/>
<DataGridTextColumn Header="Check Valve" Binding="{Binding Path=Chk}"/>
<DataGridTextColumn Header="Butterfly Valve" Binding="{Binding Path=Bfy}"/>
<DataGridTextColumn Header="Gate Valve" Binding="{Binding Path=Gate}"/>
<DataGridTextColumn Header="Alarm Valve" Binding="{Binding Path=Alm}"/>
<DataGridTextColumn Header="Dry Pipe Valve" Binding="{Binding Path=DPV}"/>
<DataGridTextColumn Header="45⁰ Elbow" Binding="{Binding Path=45Ell}"/>
<DataGridTextColumn Header="Tee Run" Binding="{Binding Path=Teerun}"/>
<DataGridTextColumn Header="Coupling" Binding="{Binding Path=Coup}"/>
<DataGridTextColumn Header="Swing Check" Binding="{Binding Path=Swg}"/>
C#:
var newTable = new CEqlTable();
var results = from myRow in vTable.AsEnumerable()
where myRow.SubCategoryID == GetPipeNumber()
select myRow;
foreach (DataRow dr in results)
{
var nextEntry = new CEqlTableRec(
false, (int)dr[0], (int)dr[1], (double)dr[2], (double)dr[3],
(double)dr[4], (double)dr[5], (double)dr[6], (double)dr[7],
(double)dr[8], (double)dr[9], (double)dr[10], (double)dr[11],
(double)dr[12], (double)dr[13], (double)dr[14], (double)dr[15],
Convert.ToByte(dr[18]));
newTable.Add(nextEntry);
}
dgPipeDetail.ItemsSource = newTable;
【问题讨论】:
-
请发布您的 xaml 和 C# 代码的一些有用部分。没有代码,很难说出哪里出了问题。
-
嘿,Massimiliano,我用尽可能多的代码更新了帖子。
-
newTable 是未过滤的结果吗?还是 newTable 是过滤后的结果?
-
newTable 用于过滤结果。不要让类名欺骗你。它不会创建表。它返回一个列表
-
能否请您也发布 newTable 的初始化代码?我的意思是,第一次被填满。因为第一次没问题,而“过滤”的时候就不行了,也许它们之间有一些区别。
标签: c# wpf xaml data-binding wpfdatagrid