Скрыть и изменить порядок столбцов в PagedCollectionView

У меня есть приложение Silverlight 5.0 в том, что я имею PagedCollectionView который имеет ObservableCollection сотрудников.

Я связал свой PagedCollectionView в DataGrid,

Я не хочу показывать все свои свойства сотрудников в datagrid

и я хочу расположить свои колонки самостоятельно через PagedCollectionView

но я не знаю как это сделать

Пожалуйста помоги.

2 ответа

Вы должны добавить любой элемент управления в поле шаблона и связать со свойствами пейджера:

<sdk:DataGrid Grid.Row="2" Style="{StaticResource RegularDataGridStyle}" Margin="8"
                      ItemsSource="{Binding ElementName=DemoSeachMast,Path=DataContext.DemmoPager}"
                      IsReadOnly="True"
                      CanUserReorderColumns="False" 
                      SelectedItem="{Binding ElementName=DemoSeachMast,Path=DataContext.SelectedDemoSearch,Mode=TwoWay}" Grid.ColumnSpan="2">
            <sdk:DataGrid.Effect>
                <DropShadowEffect/>
            </sdk:DataGrid.Effect>

            <sdk:DataGrid.Columns>

                <sdk:DataGridTemplateColumn Header="Details">
                    <sdk:DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>

                            <Button x:Name="btnImage" Click="Button_Click" Width="25">
                                <Button.Template>
                                    <ControlTemplate>
                                        <Border CornerRadius="5" Background="Transparent">

                                            <Image Source="/Assets/Icons/Window.png" Height="25" Width="25"/>
                                        </Border>
                                    </ControlTemplate>
                                </Button.Template>
                            </Button>

                        </DataTemplate>
                    </sdk:DataGridTemplateColumn.CellTemplate>
                </sdk:DataGridTemplateColumn>




            </sdk:DataGrid.Columns>
        </sdk:DataGrid>

Есть два способа сделать это. В обоих сценариях вам нужно установить AutoGenerateColumn в false.

  1. Если вы уже знаете столбцы, которые хотите отобразить в сетке во время разработки, добавьте столбцы в XAML напрямую.
  2. Если вы не знаете столбец во время разработки и если он поступает из базы данных с некоторым атрибутом, описывающим порядок и видимость, то добавьте событие autogeneratingcolumn, и в этом случае вы можете сделать столбец видимым или не создавать столбец и даже изменить порядок,

*РЕДАКТИРОВАТЬ*

grid.ItemsSource = Product.GetProducts (200);
grid.AutoGeneratingColumn + = grid_AutoGeneratingColumn;


void grid_AutoGeneratingColumn (отправитель объекта, DataGridAutoGeneratingColumnEventArgs e) { string headername = e.Column.Header.ToString();

        switch (headername)
        {
            case "Line":
            case "Color":
                e.Cancel = true; //Cancel the columns don't want to generate
                break;
            case "Name":
                e.Column.Header = "Name Modified";
                e.Column.DisplayIndex = 1;
                break;
            case "Price":
                e.Column.Header = "Price header";
                e.Column.DisplayIndex = 0;
                break;
            default:
                e.Cancel = true;
                break;
        }
    }


Как видно из примера, цена идет после имени, но не только изменил заголовок, я также изменил порядок отображения. Если вы запустите, цена будет первым столбцом, а Имя - вторым, а все остальные столбцы будут удалены из отображения.
http://msdn.microsoft.com/en-us/library/system.windows.controls.datagrid.autogeneratingcolumn(v=vs.95).aspx

Надеюсь это поможет.

Другие вопросы по тегам