datagrid默认排序和获取值

时间:2017-06-15 09:09:26

标签: c# wpf sorting datagrid

在我的WPF项目中,我有一个数据网格,如下所示:

 <DataGrid x:Name="dgConfig" BorderThickness="5" AutoGenerateColumns="False" Margin="10,10,10,15" ItemsSource="{Binding ModulesView, Mode=TwoWay}" FontSize="14" Background="White">
     <DataGrid.Columns>
         <DataGridTextColumn Header="ParamName" Binding="{Binding ParamName}" />
         <DataGridTextColumn Header="ParamValue" Binding="{Binding ParamValue}" />
         <DataGridTextColumn Header="DefaultValue" Binding="{Binding DefaultValue}" />
         <DataGridTextColumn Header="MaxValue" Binding="{Binding MaxValue}"/>
         <DataGridTextColumn Header="MinValue" Binding="{Binding MinValue}"/>
         <DataGridTextColumn Header="Address" Binding="{Binding Address}" SortDirection="Ascending"/>
     </DataGrid.Columns>
 </DataGrid>

现在我希望获得ParamValue值。在这种情况下,我需要将ParamValueregisterArray的顺序放入Address,那么我该如何设置DatagridAddress的顺序显示然后按ParamValue的顺序将registerArray放入数组 Address?非常感谢!

--------------------------------更新-------------- ----------------------------

定义ModulesView:

    public ICollectionView ModulesView
    {
        get { return _ModulesView; }
        set
        {
            _ModulesView = value;
            NotifyPropertyChanged();
        }
    }

使用ModulesView:

    private void RefreshModule()
    {
        ModulesView = new ListCollectionView(sdb.GetModules())
        {
            Filter = obj =>
            {
                var Module = (Module)obj;
                return SelectedProduct != null && SelectedProduct.ModelNumber == Module.ModelNumber;
            }
        };
    }

1 个答案:

答案 0 :(得分:1)

在看到您的ModulesView代码后,我建议使用ObservableCollection在此步骤ModulesView = new ListCollectionView(sdb.GetModules())而不是sdb.GetModules()进行绑定。

public ICollectionView ModulesView
{
    get { return _ModulesView; }
    set
    {
        _ModulesView = value;
        NotifyPropertyChanged();
    }
}

private ObservableCollection<Module> myModulesList;

private void RefreshModule()
{
    myModulesList = new ObservableCollection<Module>(sdb.GetModules().OrderBy(mod => mod.Address));
    ModulesView = CollectionViewSource.GetDefaultView(myModulesList);
    ModulesView.Filter = obj =>
        {
            var Module = (Module)obj;
            return SelectedProduct != null && SelectedProduct.ModelNumber == Module.ModelNumber;
        };
}

基本上,如果您想要更新数据并在数据网格中显示更改,您需要做的就是修改ObservableCollection myModulesList

之后,只要您想填写registerArray,就可以使用:

registerArray = myModulesList.OrderBy(mod => mod.Address).Select(mod => mod.ParamValue).ToArray();