How to customize the datagrid in UWP apps

≡放荡痞女 提交于 2019-12-24 09:00:00

问题


I am currently implementing an UWP application. The mockups for the application includes design for displaying an image and text in same column within data grid and highlighting the grid column for few seconds based on some condition.

As far as I know there is no control available for DataGrid in UWP, so please suggest me if there is any other Grid available in market which I can used as an alternative for datagrid or we need to customize the DataGrid to meet our requirements?


回答1:


Yes, there’s no build-in DataGrid control in UWP. If you want to show your data as a table, you could use ListView and GridView, custom its ItemTemplate to make it look like a DataGrid. More details please reference this similar thread.

As @Xavier Eoro mentioned, if you don't want to custom it your-self, you can use a third party package. For example, MyToolkit contains a DataGrid control you can reference. SyncFusion also contains DataGrid control, but it is paid.




回答2:


See the following question how can i add dataGrid in UWP

use Microsoft.Toolkit.Uwp.UI.Controls.DataGrid Res: https://docs.microsoft.com/en-us/windows/uwpcommunitytoolkit/controls/datagrid

Exp:https://github.com/Microsoft/WindowsCommunityToolkit//tree/harinikmsft/datagrid/Microsoft.Toolkit.Uwp.UI.Controls.DataGrid/DataGrid

xmlns:controls="using:Microsoft.Toolkit.Uwp.UI.Controls"



<Page.Resources>
    <CollectionViewSource x:Name="CVSposts" />
</Page.Resources>
<Grid>

    <controls:DataGrid x:Name="DataGridTTT" AutoGenerateColumns="False"  x:DefaultBindMode="TwoWay" Grid.Row="1" >
            <controls:DataGrid.Columns>
                <controls:DataGridTextColumn Header="PostId"   Binding="{Binding PostId}" />
                <controls:DataGridTextColumn Header="Title"  Binding="{Binding Title}" />
            <controls:DataGridTextColumn Header="Content1"  Binding="{Binding Content1}" />
            <controls:DataGridTemplateColumn Tag="Col">
                    <controls:DataGridTemplateColumn.CellTemplate>
                        <DataTemplate  >
                            <Grid Name="Grid1" Tag="{Binding BlogId, Mode=TwoWay , UpdateSourceTrigger=PropertyChanged}">
                                <ComboBox  x:Name="ComboBoxTTT"     
                            SelectedValue="{Binding BlogId, Mode=TwoWay , UpdateSourceTrigger=PropertyChanged}"
                                SelectedValuePath="BlogId"   DisplayMemberPath="Url"   ItemsSource="{Binding Blogss}"
                                />
                            </Grid>
                        </DataTemplate>
                    </controls:DataGridTemplateColumn.CellTemplate>
                </controls:DataGridTemplateColumn>

            </controls:DataGrid.Columns>
        </controls:DataGrid>

</Grid>



回答3:


I use the SyncFusion SfDataGrid which is amazing, and free with a community license if you have less than $1 million in revenue.

I customize mine using both XAML and C# code behind.

    <Page.Resources>
    <Style x:Key="dgHeaderStyle" TargetType="grid:GridHeaderCellControl">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="grid:GridHeaderCellControl">
                    <Border Background="#FFC8C8C8" BorderThickness="0">
                        <TextBlock VerticalAlignment="Center"
                                       FontWeight="Bold"
                                       Foreground="Black"
                                       TextWrapping="Wrap" TextAlignment="Center"
                                       Text="{Binding HeaderText}" SelectionHighlightColor="{x:Null}" FontFamily="Segoe UI" />
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Page.Resources>

                <grid:SfDataGrid FontSize="14" Grid.Row="0" SelectedIndex="0" HeaderStyle="{StaticResource dgHeaderStyle}" x:Name="dgMain" AutoGenerateColumns="False" CurrentCellBorderBrush="{x:Null}" RowSelectionBrush="#FFC6DBE9" GroupRowSelectionBrush="{x:Null}" BorderBrush="#7F808080" BorderThickness="1"  x:FieldModifier="public" SelectionChanged="dgMain_SelectionChanged" AllowSelectionOnPointerPressed="True" AllowGrouping="False" AllowSorting="False" IsDoubleTapEnabled="False" IsHoldingEnabled="False" IsRightTapEnabled="False" ShowColumnWhenGrouped="False" NavigationMode="Row" Tapped="dgMain_Tapped" FontFamily="Segoe UI" RowHeaderWidth="0" AllowDraggingColumns="False" Foreground="Black" Background="{x:Null}" HorizontalAlignment="Left" RequestedTheme="Default" ShowDetailsViewIndentCell="False" SelectionMode="Single" FrozenColumnCount="1" SelectionUnit="Row" IsReadOnly="True" MinHeight="100" MinWidth="100" RowHoverHighlightingBrush="#FFB1D6F0" SelectionForegroundBrush="Black">
                <grid:SfDataGrid.Columns>
                    <grid:GridTextColumn TextAlignment="Center" HeaderText="Record" Width="80" MappingName="Record" />
                    <grid:GridTextColumn TextAlignment="Center" HeaderText="" Width="300" MappingName="Col01" />
                    <grid:GridTextColumn TextAlignment="Center" HeaderText="" Width="300" MappingName="Col02" />
                    <grid:GridTextColumn TextAlignment="Center" HeaderText="" Width="300" MappingName="Col03" />
                    <grid:GridTextColumn TextAlignment="Center" HeaderText="" Width="300" MappingName="Col04" />
                    <grid:GridTextColumn TextAlignment="Center" HeaderText="" Width="300" MappingName="Col05" />
                    <grid:GridTextColumn TextAlignment="Center" HeaderText="" Width="300" MappingName="Col06" />
                    <grid:GridTextColumn TextAlignment="Center" HeaderText="" Width="300" MappingName="Col07" />
                    <grid:GridTextColumn TextAlignment="Center" HeaderText="" Width="300" MappingName="Col08" />
                    <grid:GridTextColumn TextAlignment="Center" HeaderText="" Width="300" MappingName="Col09" />
                    <grid:GridTextColumn TextAlignment="Center" HeaderText="" Width="300" MappingName="Col10" />
                    <grid:GridTextColumn TextAlignment="Center" HeaderText="" Width="300" MappingName="Col11" />
                    <grid:GridTextColumn TextAlignment="Center" HeaderText="" Width="300" MappingName="Col12" />
                    <grid:GridTextColumn TextAlignment="Center" HeaderText="" Width="300" MappingName="Col13" />
                    <grid:GridTextColumn TextAlignment="Center" HeaderText="" Width="300" MappingName="Col14" />
                    <grid:GridTextColumn TextAlignment="Center" HeaderText="" Width="300" MappingName="Col15" />
                    <grid:GridTextColumn TextAlignment="Center" HeaderText="" Width="300" MappingName="Col16" />
                    <grid:GridTextColumn TextAlignment="Center" HeaderText="" Width="300" MappingName="Col17" />
                    <grid:GridTextColumn TextAlignment="Center" HeaderText="" Width="300" MappingName="Col18" />
                    <grid:GridTextColumn TextAlignment="Center" HeaderText="" Width="300" MappingName="Col19" />
                    <grid:GridTextColumn TextAlignment="Center" HeaderText="" Width="300" MappingName="Col20" />
                    <grid:GridTextColumn TextAlignment="Center" HeaderText="" Width="300" MappingName="Col21" />
                    <grid:GridTextColumn TextAlignment="Center" HeaderText="" Width="300" MappingName="Col22" />
                    <grid:GridTextColumn TextAlignment="Center" HeaderText="" Width="300" MappingName="Col23" />
                    <grid:GridTextColumn TextAlignment="Center" HeaderText="" Width="300" MappingName="Col24" />
                    <grid:GridTextColumn TextAlignment="Center" HeaderText="" Width="300" MappingName="Col25" />
                    <grid:GridTextColumn TextAlignment="Center" HeaderText="" Width="300" MappingName="Col26" />
                    <grid:GridTextColumn TextAlignment="Center" HeaderText="" Width="300" MappingName="Col27" />
                    <grid:GridTextColumn TextAlignment="Center" HeaderText="" Width="300" MappingName="Col28" />
                    <grid:GridTextColumn TextAlignment="Center" HeaderText="" Width="300" MappingName="Col29" />
                    <grid:GridTextColumn TextAlignment="Center" HeaderText="" Width="300" MappingName="Col30" />
                    <grid:GridTextColumn TextAlignment="Center" HeaderText="" Width="300" MappingName="Col31" />
                    <grid:GridTextColumn TextAlignment="Center" HeaderText="" Width="300" MappingName="Col32" />
                    <grid:GridTextColumn TextAlignment="Center" HeaderText="" Width="300" MappingName="Col33" />
                    <grid:GridTextColumn TextAlignment="Center" HeaderText="" Width="300" MappingName="Col34" />
                    <grid:GridTextColumn TextAlignment="Center" HeaderText="" Width="300" MappingName="Col35" />
                    <grid:GridTextColumn TextAlignment="Center" HeaderText="" Width="300" MappingName="Col36" />
                    <grid:GridTextColumn TextAlignment="Center" HeaderText="" Width="300" MappingName="Col37" />
                    <grid:GridTextColumn TextAlignment="Center" HeaderText="" Width="300" MappingName="Col38" />
                    <grid:GridTextColumn TextAlignment="Center" HeaderText="" Width="300" MappingName="Col39" />
                    <grid:GridTextColumn TextAlignment="Center" HeaderText="" Width="300" MappingName="Col40" />
                    <grid:GridTextColumn TextAlignment="Center" HeaderText="" Width="300" MappingName="Col41" />
                    <grid:GridTextColumn TextAlignment="Center" HeaderText="" Width="300" MappingName="Col42" />
                    <grid:GridTextColumn TextAlignment="Center" HeaderText="" Width="300" MappingName="Col43" />
                    <grid:GridTextColumn TextAlignment="Center" HeaderText="" Width="300" MappingName="Col44" />
                    <grid:GridTextColumn TextAlignment="Center" HeaderText="" Width="300" MappingName="Col45" />
                    <grid:GridTextColumn TextAlignment="Center" HeaderText="" Width="300" MappingName="Col46" />
                    <grid:GridTextColumn TextAlignment="Center" HeaderText="" Width="300" MappingName="Col47" />
                    <grid:GridTextColumn TextAlignment="Center" HeaderText="" Width="300" MappingName="Col48" />
                    <grid:GridTextColumn TextAlignment="Center" HeaderText="" Width="300" MappingName="Col49" />
                    <grid:GridTextColumn TextAlignment="Center" HeaderText="" Width="300" MappingName="Col50" />
                </grid:SfDataGrid.Columns>
            </grid:SfDataGrid>

You can do cool stuff programmatically like hiding columns:

dgMain.Columns[c].IsHidden = true;

And automatically resizing rows to fill content:

            dgMain.QueryRowHeight += dataGrid_QueryRowHeight;

        private void dataGrid_QueryRowHeight(object sender, QueryRowHeightEventArgs e)
    {
        if (dgMain != null &&
            !dgMain.GridColumnSizer.GetAutoRowHeight(e.RowIndex, gridRowResizingOptions, out autoHeight)) return;

        e.Height = autoHeight;
        e.Handled = true;
    }


来源:https://stackoverflow.com/questions/43542792/how-to-customize-the-datagrid-in-uwp-apps

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!