Скрыть и изменить порядок столбцов в 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.
- Если вы уже знаете столбцы, которые хотите отобразить в сетке во время разработки, добавьте столбцы в XAML напрямую.
- Если вы не знаете столбец во время разработки и если он поступает из базы данных с некоторым атрибутом, описывающим порядок и видимость, то добавьте событие 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
Надеюсь это поможет.