Silverlight:当我为数据网格设置itemssource时,SIlverlight应用程序崩溃了

时间:2012-06-19 08:10:06

标签: silverlight datagrid

我正在开发一个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这么多次,但没办法......所以我需要帮助很严重。

如果有任何机构可以解决问题,请给我一点解释,因为我不熟悉银光,并且由于缺乏知识而不想再犯错误。

提前致谢。

1 个答案:

答案 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>