Listedeki verileri DataGrid combobox'a alma

0

Soru

Bir listeden WPF'DEKİ bir datagrid'deki bir combobox sütununa öğe almakta sorun yaşıyorum. Bu benim için çok yeni bu yüzden herhangi bir yardım büyük mutluluk duyacağız. Bunu yapmanın birçok yolu var gibi görünüyor ama hiçbirinin çalışmasını sağlayamadım.

'''

                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding Positionname}"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>

                <DataGridTemplateColumn.CellEditingTemplate>
                    <DataTemplate>
                        <ComboBox x:Name="poscombo Loaded="comboposloaded"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellEditingTemplate>
            
            </DataGridTemplateColumn>

Arkasındaki koddaki Verileri içeren liste

 List<Positions> PositionList = new List<Positions>();

Güncelleme: Listeyi itemsource olarak çekmek için bir yükleme olayı ekledim. Şimdi soru, seçilen değerin combobox'tan metin bloğuna nasıl geri getirileceğidir?

Combo'yu yüklemek için C # eklendi.

    private void comboposloaded(object sender, RoutedEventArgs e)
    {
        ComboBox cmb = (ComboBox)sender;
        cmb.ItemsSource = PositionList;
        cmb.DisplayMemberPath = "info";
        cmb.SelectedValuePath = "psnme";

    }
c# combobox datagrid wpf
2021-11-19 03:06:28
2

En iyi cevabı

0

Şimdi soru, seçilen değerin combobox'tan metin bloğuna nasıl geri getirileceğidir?

Bağla psnme mülkiyet Positions itiraz etmek Positionname veri nesnesinin özelliği:

<ComboBox x:Name="poscombo" Loaded="comboposloaded"
          SelectedValue="{Binding Positionname, UpdateSourceTrigger=PropertyChanged}"/>
2021-11-19 15:00:41
0

DataGridComboBoxColumn için veri bağlama düşündüğünüzden biraz daha karmaşık görünüyor.

  1. Liste yerine ObservableCollection kullanın. Bu, datagrid'in içeriğini otomatik olarak güncelleyecektir.
  2. ObjectDataProvide kullanarak birleşik giriş kutusuna veri yükleyebilirsiniz. Bu aynı zamanda kaynaktaki verilerin otomatik olarak güncellenmesini sağlayacaktır. İşte çalışan bir örnek.
    public partial class MainWindow : Window
    {
        public EmployeeViewModel EmployeeVM;
        public MainWindow()
        {
            InitializeComponent();
            EmployeeVM = new EmployeeViewModel();
            MyDataGrid.ItemsSource = EmployeeVM.EmployeeList;
        }
    }

    public class Employee
    {
        public string Name { get; set; }
        public PositionEnum Position { get; set; }
    }

    public enum PositionEnum { Marketeer, Mechanic, Accountant };
    public class EmployeeViewModel 
    {
        public ObservableCollection<Employee> EmployeeList =
          new ObservableCollection<Employee>();
        public EmployeeViewModel()
        { 
            EmployeeList.Add(new Employee()
             { Name = "James Smith", Position = PositionEnum.Accountant });
            EmployeeList.Add(new Employee()
             { Name = "Robert Johnson", Position = PositionEnum.Marketeer });
            EmployeeList.Add(new Employee() 
             { Name = "David Williams", Position = PositionEnum.Mechanic });
        }
    }

XAMLNAME

<Window x:Class="WpfApp6.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:core="clr-namespace:System;assembly=mscorlib"
        xmlns:local="clr-namespace:WpfApp6"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800" >
    <Window.Resources>
        <!--Create list of enumeration values-->
        <ObjectDataProvider x:Key="myEnum" MethodName="GetValues" ObjectType="{x:Type core:Enum}">
            <ObjectDataProvider.MethodParameters>
                <x:Type Type="local:PositionEnum"/>
            </ObjectDataProvider.MethodParameters>
        </ObjectDataProvider>
    </Window.Resources>
    <Grid>
        <DataGrid x:Name="MyDataGrid"
            AutoGenerateColumns="False"      
            HorizontalAlignment="Left"
            VerticalAlignment="Top"
            RowHeaderWidth="0" >
            <DataGrid.Columns>
                <DataGridTextColumn
                   Binding="{Binding Name}"
                   Header="Name" />
                <DataGridComboBoxColumn
                    Header="Order Status"
                    SelectedItemBinding="{Binding Position}"
                    ItemsSource="{Binding Source={StaticResource myEnum}}" />
            </DataGrid.Columns>
        </DataGrid>
    </Grid>
</Window>

enter image description here

Kendinizi MVVM kalıbına alıştırmanız ve bunu bu tür uygulamalar oluşturmak için bir temel olarak kullanmanız gerektiğini düşünün.

2021-11-19 12:22:47

Diğer dillerde

Bu sayfa diğer dillerde

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................