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; }

        }

然后使用以下方法设置数据网格的项目源:

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的新手,并且由于缺乏知识不想再犯错误。

提前致谢。

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