特定の種類の製品の販売目標を設定できる 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; }
}
そして、次のメソッドを使用して、データグリッドの 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
と、今回はデータグリッドが空白のままになっていることを除いて、コンボからアイテムを選択できました(通常、実際にはアイテムソースは設定されていません) ) したがって、DataGrid の ItemsSource を設定すると、Silverlight アプリがクラッシュするようです。私は数時間苦労しており、GoogleとStackOFを何度も検索しましたが、仕方がありません...だから私はひどく助けが必要です.
私はSilverlightを初めて使用し、知識不足のために再び間違いを犯したくないので、誰かが問題を解決できる場合は、少し説明もしてください。
前もって感謝します。