标签: wpfdatagrid

WPF 4 DataGrid:显示和隐藏列

我正在尝试为DataGrid实现列选择器功能,如果我尝试将列的标题内容定义为不仅仅是一个字符串,那么我遇到了问题.下面是一个非常简化的示例,其中所有样式,视图模型,绑定等都被剥离.

共有3列:

第一列使用标题字符串.第二列尝试使用工具提示将标题内容设置为Label.第三列绑定使用ToolTip将标题内容设置为TextBlock.

单击列A的"切换可见性"按钮可以正常工作.列B和C的"切换可见性"按钮会导致InvalidOperationException,并显示消息"指定的元素已经是另一个元素的逻辑子元素.首先断开它".

<Window x:Class="DataGridColumnChoosing.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition Height="*" />
    </Grid.RowDefinitions>
    <StackPanel Orientation="Horizontal" Margin="0,10">
        <TextBlock Margin="15, 0">Toggle Visibility:</TextBlock>
        <Button Click="ToggleA">Column A</Button>
        <Button Click="ToggleB">Column B</Button>
        <Button Click="ToggleC">Column C</Button>
    </StackPanel>
    <!-- Main Fuel Mileage Datagrid -->
    <DataGrid  x:Name="mySampleDataGrid" Grid.Row="1"
                    AutoGenerateColumns="False" CanUserSortColumns="False" CanUserResizeRows="False" CanUserAddRows="False"
                    GridLinesVisibility="All" RowHeaderWidth="0">
        <DataGrid.Columns>
            <DataGridTemplateColumn x:Name="colA" Width="40*" IsReadOnly="True" Header="Column A">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock />
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>


            <DataGridTemplateColumn x:Name="colB" Width="40*" IsReadOnly="True" >
                <DataGridTemplateColumn.Header>
                    <Label Content="Column B" ToolTip="A short explanation of Column …
Run Code Online (Sandbox Code Playgroud)

wpf xaml wpfdatagrid

9
推荐指数
1
解决办法
7294
查看次数

解决DataGrid不一致的列宽大小

在我们的应用程序中,我们使用datagrids来布局填充了模板化内容和按钮的行,但是间歇性地出现问题,其中某些列有时会将自身的大小调整为列的最小宽度,有时会调整到列标题内容宽度.这似乎与设置itemssource的时间和加载事件发生的时间有关,但我无法确定它.

行为不正确的示例 破碎

正确行为的示例 在此输入图像描述

itemssource绑定到viewmodel上的ObservableCollection,它使用async和await关键字以及dataservice填充异步.

我试图通过隐藏初始化中的所有列来解决问题,然后一旦设置了itemssource并调用了isloaded,将所有列设置回初始可见性,这似乎有一些影响,但没有完全解决问题.

列定义的xaml

<Style x:Key="MainDataGridColumnHeader" TargetType="{x:Type DataGridColumnHeader}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type DataGridColumnHeader}">
                <TextBlock Text="{TemplateBinding Content}" Foreground="{StaticResource HighlightedTextBrush}"
                           Background="Transparent"
                           FontSize="16" FontWeight="Bold" HorizontalAlignment="Center" VerticalAlignment="Center"/>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

<Style x:Key="MainDataGridRow" TargetType="{x:Type DataGridRow}">
    <Setter Property="Background" Value="{StaticResource LightBackgroundBrush}" />
    <Setter Property="BorderBrush" Value="{StaticResource Faded10MidBackgroundBrush}"/>
    <Setter Property="BorderThickness" Value="0,0,0,1" />
    <Setter Property="SnapsToDevicePixels" Value="true" />
    <Setter Property="Padding" Value="5"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type DataGridRow}">
                <Border x:Name="DGR_Border"
                        BorderBrush="{TemplateBinding BorderBrush}"
                        BorderThickness="{TemplateBinding BorderThickness}"
                        Background="{TemplateBinding Background}"
                        SnapsToDevicePixels="True"
                        CornerRadius="0"
                        Margin="0,5"
                        Width="{Binding ActualWidth, RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}}}">
                    <SelectiveScrollingGrid>
                        <SelectiveScrollingGrid.ColumnDefinitions>
                            <ColumnDefinition Width="Auto" …
Run Code Online (Sandbox Code Playgroud)

c# wpf xaml wpfdatagrid

9
推荐指数
1
解决办法
884
查看次数

WPF DataGrid:空行丢失

我正在创建一个带有a的WPF窗口DataGrid,我想在网格底部显示空白的"新项目"行,允许我向网格添加新项目.由于某种原因,我的窗口上的网格上没有显示空白行.这是我用来创建的标记DataGrid:

<toolkit:DataGrid  x:Name="ProjectTasksDataGrid" 
                   DockPanel.Dock="Top" 
                   Style="{DynamicResource {x:Static res:SharedResources.FsBlueGridKey}}"
                   AutoGenerateColumns="False" 
                   ItemsSource="{Binding SelectedProject.Tasks}" 
                   RowHeaderWidth="0" 
                   MouseMove="OnStartDrag" 
                   DragEnter="OnCheckDropTarget" 
                   DragOver="OnCheckDropTarget" 
                   DragLeave="OnCheckDropTarget" 
                   Drop="OnDrop" 
                   InitializingNewItem="ProjectTasksDataGrid_InitializingNewItem">
    <toolkit:DataGrid.Columns>
        <toolkit:DataGridCheckBoxColumn HeaderTemplate="{DynamicResource {x:Static res:SharedResources.CheckmarkHeaderKey}}" Width="25" Binding="{Binding Completed}" IsReadOnly="false"/>
        <toolkit:DataGridTextColumn Header="Days" Width="75" Binding="{Binding NumDays}" IsReadOnly="false"/>
        <toolkit:DataGridTextColumn Header="Due Date" Width="75" Binding="{Binding DueDate, Converter={StaticResource standardDateConverter}}" IsReadOnly="false"/>
        <toolkit:DataGridTextColumn Header="Description" Width="*" Binding="{Binding Description}" IsReadOnly="false"/>
    </toolkit:DataGrid.Columns>
</toolkit:DataGrid>
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚为什么空白行没有显示.我尝试了明显的东西(IsReadOnly="false",CanUserAddRows="True"),没有运气.知道空行被禁用的原因吗?谢谢你的帮助.

wpf datagrid wpfdatagrid

8
推荐指数
4
解决办法
2万
查看次数

没有CTRL或空格的WPF数据网格多重选择

WPF Datagrid有两种选择模式,Single或Extended.WPF ListView有第三个 - 多个.此模式允许您单击并选择多行而不按住CTRL或Shift.任何人都知道如何为datagrid做这个?

wpf selection wpftoolkit wpfdatagrid

8
推荐指数
3
解决办法
7455
查看次数

WPF Datagrid绑定自定义列标题

我试图弄清楚如何使用MVVM模式将WPF DataGrid的列标题和主数据绑定到数据源.我正在寻找的结果将是这样的:

alt text http://brian.vallelunga.com/files/datagrid-custom-headers.PNG

我已成功设置了标题,但我不确定如何绑定标题中的值.具体来说,复选框的IsChecked属性,组合框的选定索引和文本框的值.

我以前使用一个简单的DataTable来填充主网格数据,但是我需要更复杂的东西来保存网格数据和每列的值.或许我可以完全将它们存储为单独的实体.

那么,有没有人知道如何实现这种约束?一个限制是列必须是自动生成的,因为我不知道它们在运行时会是什么.应用程序只是从Excel电子表格加载数据,并且可能存在任意数量的列.

谢谢,Brian

wpf binding datagrid wpfdatagrid columnheader

8
推荐指数
1
解决办法
2万
查看次数

如何在WPFToolkit DataGrid的列之间创建间隙

我有一个WPF数据网格(从标题指示的WPF工具包),我想要一些列之间的差距,甚至没有标题在上面,你可以看到之间的背景.我不知道如何管理这个.

顺便说一句,我的所有列都是TemplateColumns,但我更喜欢一个解决方案,我不需要为每一列设置样式,而且它的标题在一侧有一个gab.也许是类似的东西<DataGridGapColum Width="5" />,不幸的是,这样的事情并不存在.

.net wpf datagrid wpftoolkit wpfdatagrid

8
推荐指数
1
解决办法
1816
查看次数

WPF Datagrid延迟加载

细节

  1. VS-2008专业版SP1
  2. 版本.net 3.5
  3. 语言:C#

我有一个WPF Datagrid,它从Linq-sql查询Datacontext数据项加载.结果集包含大约200k行,加载它们,排序,过滤等很慢.提高速度的简单方法是什么?

我看到的几件事情都是Scrollview,数据虚拟化等人们也谈论了Paging,Profiling等

.net c# wpf wpfdatagrid visual-studio-2008

8
推荐指数
1
解决办法
9410
查看次数

防止删除DataGrid行

我希望保护DataGrid的某些行以防止用户删除,尽管该属性CanUserDeleteRows设置为true.

是否有可能保护某些行,希望通过数据绑定或触发器?ItemsSource绑定到T的ObservableCollection.

wpf datagrid wpfdatagrid

8
推荐指数
1
解决办法
6369
查看次数

全选的事件:WPF Datagrid

我正在使用WPF数据网格.在数据网格中,用户具有列标题和行标题.

当列标题和行标题都可见时,在左上角我们有一个小的方形部分可用.(列和行标题相交的左上角的横截面.)当我们点击它时,它会选择数据网格中的所有单元格.那有什么事吗?如果不是如何陷阱那个事件.请指导我.

如果您需要有关此问题的任何其他信息,请与我们联系.

此致,Priyank

c# wpf wpfdatagrid

8
推荐指数
1
解决办法
6913
查看次数

如何将DataGrid转换为dataTable

我想将所有datagrid记录复制到datatable而不使用任何循环.对于Ex:

Dim dt as New DataTable
dt = Datagrid1.Items
Run Code Online (Sandbox Code Playgroud)

但这不是工作并给出错误信息.

我的开发平台是Visual Studio 2010,语言是WPF和vb.net 4.0

vb.net wpf wpfdatagrid wpf-4.0

8
推荐指数
2
解决办法
2万
查看次数