我正在开发一个silverlight应用程序,您可以在其中设置特定类型产品的销售目标。 我有一个组合框,里面有一些产品类型,如Rice,Tea等。一旦你选择了一个类型,那个类型的所有产品都会加载到一个datagrid中,其中包含以下信息: 产品名称,会话(这是目标将被激活的时间,之前使用日期选择器选择,并作为字符串添加到datagrid),目标金额。 我已经定义了如下数据网格:
<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; }
}
然后使用以下方法设置datagrid的itemssource:
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);
}
}
}
我已经通过for循环检查了列表rows
,如果它已正确填充,并且看到它是。
从组合框中选择产品类型后,将调用此方法:
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&amp; StackOF这么多次,但没办法......所以我需要帮助很严重。
如果有任何机构可以解决问题,请给我一点解释,因为我不熟悉银光,并且由于缺乏知识而不想再犯错误。
提前致谢。
答案 0 :(得分:1)
由于你没有给出例外,我们没有太多可继续的事情。我猜是因为你在这里发布它没有特定的线路,它可能是一个Xaml问题。对于初学者,请尝试简化datagrid的列。您正在设置一堆没有业务设置的属性。我也注意到你在每个上面都将DisplayIndex设置为-1,我怀疑是这个问题。
试试这个:
<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" CanUserResize="True" Header="Name" IsReadOnly="False" Width="Auto"/>
<sdk:DataGridTextColumn Binding="{Binding Session}" CanUserSort="True" CanUserReorder="True" CanUserResize="True" Header="Session" IsReadOnly="False" Width="Auto"/>
<sdk:DataGridTextColumn Binding="{Binding TargetQuantity, Mode=TwoWay}" CanUserSort="True" CanUserReorder="True" CanUserResize="True" Header="Target Quantity" IsReadOnly="False" Width="Auto"/>
</sdk:DataGrid.Columns>
</sdk:DataGrid>