C# WPF datagrid checkboxcolumn 使用问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# WPF datagrid checkboxcolumn 使用问题相关的知识,希望对你有一定的参考价值。

小弟初学,做一个小项目。
前提:一、我用datagrid实现了数据绑定,每一行都是一个“用户”对象,这个用户对象有很多属性,我只让datagrid显示出了其中几个比如姓名之类的。二、我加了一个checkboxcolumn在第0列,这个列的值目前与每一行的对象无关。

我想实现一个功能:点选某几行的checkbox(可以多选),把选中行的对象传到一个数组里,以便于我进行进一步操作。这个多选事件该怎么写?用什么关键字监听?怎么取到同行的整个对象而不是只去到后面哪一个单元格的值?

关于DataGrid的用法,可以先学习下百度经验的DataGrid用法系列http://jingyan.baidu.com/season/38751
包含了checkboxcolumn的用法,如果直接给你答案,对你的学习不是很有用。
如果学习了还有问题,可以继续追问。追问

你给的这个教程说的太模糊了,而且和我的问题好像没什么关系。我现在不是数据绑定的问题,只是想怎么样检测被checkbox选中行然后返回行内对象的问题。能给我一点提示么?用for循环遍历检查么?怎么检查?用什么关键字?检查后怎么返回对应行的对象?

追答

DataGrid用法系列的第6篇看了吗?SelectedItem就能返回对象的,里面获得某个单元格对象都可以,看了你再提问。

参考技术A 像鸟儿和树木的一曲清歌。
另一些人铸上头像,
画地球,一定不可直视太阳
当他走过无形的田野——
悬崖的白色云母
以狂的中照,哈哈本回答被提问者采纳

使用 C# 在 WPF 中使 DataGrid 列标题可排序

【中文标题】使用 C# 在 WPF 中使 DataGrid 列标题可排序【英文标题】:Making a DataGrid Column Header sortable in WPF using C# 【发布时间】:2010-11-20 18:12:01 【问题描述】:

我在 Visual Studio 2008 中使用 C#,并且我已经安装了 WPF 工具包。我在 testtest.xaml 中创建了一个 DataGrid。 ID 和 Parts $ 列能够通过单击各自的列标题对 DataGrid 进行排序。但是,列标题 Complete Date 没有该功能。我使用标签“DataGridTemplateColumn”来格式化该列的日期。您如何对列标题完成日期进行编程,以便您可以单击完成日期列标题并对该列进行排序。如果单击列,箭头不仅不显示,而且列标题也不是“可单击的”。 谢谢

    <Label Height="22" HorizontalAlignment="Left" Margin="10,45,0,0" Name="label1" VerticalAlignment="Top" Width="41">Task</Label>
    <my:DataGrid ItemsSource="Binding" AutoGenerateColumns="False" Margin="140,83,67,28" Name="dataGrid1" GridLinesVisibility="Vertical" IsReadOnly="True">
        <my:DataGrid.Columns>
            <my:DataGridTextColumn    Binding="Binding Path=[ID]" Header="ID" />
            <my:DataGridTextColumn Binding="Binding Path=p" Header="Parts $" />
            <my:DataGridTemplateColumn  SortMemberPath="" Header="Complete Date">
                <my:DataGridTemplateColumn.CellTemplate >
                    <DataTemplate>
                        <TextBlock>
                            <TextBlock.Text>
                                <Binding Path="CompleteDate" ConverterCulture="en-GB" StringFormat="0:MM/dd/yyyy"/>
                            </TextBlock.Text>
                        </TextBlock>
                    </DataTemplate>
                </my:DataGridTemplateColumn.CellTemplate>
            </my:DataGridTemplateColumn>
        </my:DataGrid.Columns>
    </my:DataGrid>
</Grid>

【问题讨论】:

【参考方案1】:

在您的 DataGridTemplateColumn 中,您将 SortMemberPath 设置为“”。如果将此设置为项目的实际属性(例如 CompleteDate),您应该能够进行排序。您还可以在选定的列上设置CanUserSort="true"CanUserSort="false"

SortMemberPath 在用户尝试排序时提供排序依据。如果未设置,则网格不知道如何对该列进行排序(它确实使用列中的文本)

            <my:DataGridTemplateColumn  SortMemberPath="CompleteDate" Header="Complete Date" CanUserSort="true">
            <my:DataGridTemplateColumn.CellTemplate >
                    <DataTemplate>
                        <TextBlock>
                            <TextBlock.Text>
                                <Binding Path="CompleteDate" ConverterCulture="en-GB" StringFormat="0:MM/dd/yyyy"/>
                            </TextBlock.Text>
                        </TextBlock>
                    </DataTemplate>
                </my:DataGridTemplateColumn.CellTemplate>
            </my:DataGridTemplateColumn>

【讨论】:

列绑定属性是否也可以?怎么办?

以上是关于C# WPF datagrid checkboxcolumn 使用问题的主要内容,如果未能解决你的问题,请参考以下文章

在 C# WPF 中从 MySQL 数据库中填充 dataGrid

c# wpf datagrid 模板列修改某个单元格,更新所选行另一个单元格的值,如何做到呢?

c# wpf的datagrid列标题间的分割线,我加background后变成一大块黑色的,怎么变成间隔的一块一块的,如图

C# WPF 根据数据更改 DataGrid 行(背景)颜色

C# WPF DataGrid 在列中搜索值,返回行索引

WPF C# DataGrid 绑定到存储过程