我正在开发一个 Silverlight 应用程序,您可以在其中为特定类型的产品设置销售目标。我有一个组合框,其中包含一些产品类型,例如 Rice , Tea 等。一旦您选择了一种类型,该类型的所有产品都会加载到具有以下信息的数据网格中:产品名称,会话(这是目标的时间将被激活,之前使用日期选择器选择,并作为字符串添加到数据网格中),目标金额。我已经定义了如下的数据网格:
<sdk:DataGrid x:Name="productListGrid" Margin="8,117,8,8" ColumnHeaderStyle="{StaticResource DataGridColumnHeaderStyle}" CellStyle="{StaticResource DataGridCellStyle}" RowHeight="50" AutoGenerateColumns="False">
<sdk:DataGrid.Columns>
<sdk:DataGridTextColumn Binding="{Binding ProductName}" CanUserSort="True" CanUserReorder="True" CellStyle="{x:Null}" CanUserResize="True" ClipboardContentBinding="{x:Null}" DisplayIndex="-1" DragIndicatorStyle="{x:Null}" EditingElementStyle="{x:Null}" ElementStyle="{x:Null}" Foreground="{x:Null}" FontWeight="Normal" FontStyle="Normal" FontSize="NaN" HeaderStyle="{x:Null}" Header="Name" IsReadOnly="False" MaxWidth="Infinity" MinWidth="0" SortMemberPath="{x:Null}" Visibility="Visible" Width="Auto"/>
<sdk:DataGridTextColumn Binding="{Binding Session}" CanUserSort="True" CanUserReorder="True" CellStyle="{x:Null}" CanUserResize="True" ClipboardContentBinding="{x:Null}" DisplayIndex="-1" DragIndicatorStyle="{x:Null}" EditingElementStyle="{x:Null}" ElementStyle="{x:Null}" Foreground="{x:Null}" FontWeight="Normal" FontStyle="Normal" FontSize="NaN" HeaderStyle="{x:Null}" Header="Session" IsReadOnly="False" MaxWidth="Infinity" MinWidth="0" SortMemberPath="{x:Null}" Visibility="Visible" Width="Auto"/>
<sdk:DataGridTextColumn Binding="{Binding TargetQuantity, Mode=TwoWay}" CanUserSort="True" CanUserReorder="True" CellStyle="{x:Null}" CanUserResize="True" ClipboardContentBinding="{x:Null}" DisplayIndex="-1" DragIndicatorStyle="{x:Null}" EditingElementStyle="{x:Null}" ElementStyle="{x:Null}" Foreground="{x:Null}" FontWeight="Normal" FontStyle="Normal" FontSize="NaN" HeaderStyle="{x:Null}" Header="Target Quantity" IsReadOnly="False" MaxWidth="Infinity" MinWidth="0" SortMemberPath="{x:Null}" Visibility="Visible" Width="Auto"/>
</sdk:DataGrid.Columns>
</sdk:DataGrid>
我有一个代表每一行的类:
public class DataGridRow
{
public string ProductName{get;set;}
public string Session { get; set; }
public string TargetQuantity { get; set; }
}
然后使用以下方法设置数据网格的项目源:
private void initDataGrid(string product_type)
{
List<DataGridRow> rows = new List<DataGridRow>();
if (start.Equals(NullDate) || end .Equals(NullDate))
{
MessageBox.Show("Please select start and end date first!");
}
else
{
var products_list = _context.Products.Where(entity => entity.ProductType.Equals(product_type));
var product_name_list = from product in products_list select product.ProductName;
foreach (string name in product_name_list)
{
rows.Add(new DataGridRow()
{
ProductName = name,
Session = this.Months[start.Month-1] + "," + start.Year + "->" + this.Months[end.Month-1] + "," + end.Year,
TargetQuantity = "0.0"
});
}
try
{
this.productListGrid.ItemsSource = rows;
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
如果它被正确填充,我已经rows
通过 for 循环检查了列表,并看到它是。
一旦我从组合框中选择产品类型,就会调用此方法:
private void productCombo_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e)
{
string product_type=(string)e.AddedItems[0];
this.initDataGrid(product_type);
}
this.productListGrid.ItemsSource = rows;
但是,一旦我运行应用程序并从组合框中选择某些内容,整个屏幕就会变为空白。然后我从方法中注释掉该行initDataGrid
,然后我可以从组合中选择项目,除了数据网格这次留空(通常实际上,未设置 itemssource ) 所以当我为 DataGrid 设置 ItemsSource 时,我的 silverlight 应用程序似乎崩溃了。我已经为此苦苦挣扎了几个小时,多次搜索 Google 和 StackOF,但没办法……所以我非常需要帮助。
如果任何机构可以解决问题,也请给出一些解释,因为我是silverlight的新手,并且由于缺乏知识不想再犯错误。
提前致谢。