0

特定の種類の製品の販売目標を設定できる 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を初めて使用し、知識不足のために再び間違いを犯したくないので、誰かが問題を解決できる場合は、少し説明もしてください。

前もって感謝します。

4

1 に答える 1

1

あなたは例外を与えていないので、先に進む必要はあまりありません。ここに投稿しているので、壊れている特定の行がないので、おそらくXamlの問題だと思います。まず、データグリッドの列を単純化してみてください。ビジネス設定のない一連のプロパティを設定しています。また、問題であると思われるそれぞれの 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>
于 2012-06-19T15:30:02.760 に答える