【问题标题】:Data grid inside list view as item template and Read Data from Database列表视图内的数据网格作为项目模板并从数据库中读取数据
【发布时间】:2018-09-27 11:39:21
【问题描述】:

我通过 WPF 创建了一个项目,我的代码如下

    <UserControl.Resources>                     
        <x:Array x:Key="OrderDataGridItems" Type="{x:Type system:String}">
            <system:String>1</system:String>
            <system:String>2</system:String>
            <system:String>3</system:String>
        </x:Array>      
        <DataTemplate x:Key="TemplateWithDataGrid" >
            <DataGrid ItemsSource="{StaticResource OrderDataGridItems}">
                    <DataGrid.Columns>
                        <DataGridTextColumn Header="Column1"
                                        Width="*" />
                        <DataGridTextColumn Header="Column2"
                                        Width="*" />
                    </DataGrid.Columns>
                </DataGrid> 
        </DataTemplate>       
     </UserControl.Resources>

    Triggers>

    <Grid>         
     <ListView x:Name="CustomersOrderList" ItemTemplate="{StaticResource TemplateWithDataGrid}" >    
            <ListView.ItemContainerStyle>
                <Style TargetType="ListViewItem">
                    <Setter Property="HorizontalContentAlignment" Value="Stretch" />
                </Style>
            </ListView.ItemContainerStyle>
        </ListView>   
    </Grid>
</UserControl>

以上代码仅适用于静态资源值(在 OrderDataGridItems 中)。 listview 中的这个 CustomersOrderList 可以很好地处理数据库值。我的要求是从数据库中的 DataTemplate 和 ListView 中获取并填充数据库中的所有数据,这可能吗?或者请帮助我获得此解决方案的工作,非常感谢您的帮助,提前感谢您对我们的支持。

【问题讨论】:

  • 可以将ItemTemplate中DataGrid的ItemsSource绑定到任何IEnumerable。您希望在 DataGrid 中显示的数据在哪里以及如何定义?

标签: c# wpf visual-studio xaml


【解决方案1】:

除非您不重复使用这些模板,否则您无需创建 Templates。为了简单起见,我给出了下面的示例代码,用来自外部源的数据填充 DataGrid

查看-

 <Grid>
    <DataGrid ItemsSource="{Binding OrderDataGridItems }" AutoGenerateColumns="False">
        <DataGrid.Columns>
            <DataGridTextColumn Header="Column1" Width="Auto" Binding="{Binding CountryName}" />
        </DataGrid.Columns>
    </DataGrid>
</Grid>

CodeBehind - 如果遵循 MVVM,您应该在 ViewModel 中拥有它。

public partial class MainWindow : Window, INotifyPropertyChanged
{
    private List<CountryData> orderDataGridItems;
    public List<CountryData> OrderDataGridItems
    {
        get { return orderDataGridItems; }
        set
        {
            orderDataGridItems = value;
            OnPropertyChanged("OrderDataGridItems");
        }
    }
    public MainWindow()
    {
        InitializeComponent();
        this.DataContext = this;

        var listFromDataBase = new List<CountryData>();
        listFromDataBase.Add(new CountryData { CountryName ="India"});

        OrderDataGridItems = listFromDataBase;
    }

    public event PropertyChangedEventHandler PropertyChanged;
    public void OnPropertyChanged(string propertyName)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
 }

【讨论】:

  • 感谢您的回复,因为您指示 i 笼子如下但抛出异常
  • 和后面的代码 private void GetOrderDetail() { try { DataTable dtKitchenOrders = transactionService.GetItemDetailsForKitchenOrder(); OrderDataGridItems.Items.Clear(); OrderDataGridItems.ItemsSource = dtKitchenOrders.DefaultView; OrderDataGridItems.SelectedIndex = -1; } 捕捉(异常前){ } }
  • 异常cpmes为“错误描述:当前上下文厨房中不存在名称'OrderDataGridItems'”
  • 再次感谢您的支持,现在应用程序运行,但网格上没有显示数据(绑定也可以正常工作)供您参考,我将提供以下代码
猜你喜欢
  • 1970-01-01
  • 2020-11-01
  • 1970-01-01
  • 2020-12-13
  • 1970-01-01
  • 1970-01-01
  • 2012-08-15
  • 2015-08-29
  • 2020-03-13
相关资源
最近更新 更多