gpt4 book ai didi

c# - 如果在数据网格 C# 中选中复选框,则获取整行值

转载 作者:太空宇宙 更新时间:2023-11-03 10:50:12 24 4
gpt4 key购买 nike

如果选中同一行中的某些复选框,我正在尝试编写代码以从文本框中获取 3 个值。任何人都知道一种简单(或困难)的方法来做到这一点?

我的数据网格如下所示:enter image description here

我有一个 Load 按钮,可以在文件系统中的某处找到一个特定类型的文件(XML.config),之后我调用一个方法从该文件中获取一些字符串,找到它们的子字符串并将它们放在 3 个分开的列出。这些值在数据网格中作为 Type、MapTo 和 Name。我通过将所有 3 个列表放在一个 ObservableCollection 中来实现这一点,然后我将 ObservalableCollection 发送到数据网格,如下所示:

ObservableCollection<Tuple<string, string, string>> _obsCollection = new   ObservableCollection<Tuple<string, string, string>>();
public ObservableCollection<Tuple<string, string, string>> MyObsCollection
{
get { return _obsCollection; }
}
tabela.ItemsSource = _obsCollection;

这是显示绑定(bind)的 XAML 代码:

<DataGrid Grid.Column="0" AutoGenerateColumns="False" Height="206" HorizontalAlignment="Left" Margin="12,265,0,0" Name="tabela" VerticalAlignment="Top" Width="556" SelectionChanged="tabela_SelectionChanged" Grid.RowSpan="2" ItemsSource="Binding MyObsCollection">
<DataGrid.Columns>

<DataGridTextColumn Header="Type" Width="122" Binding="{Binding Item1}"/>
<DataGridTextColumn Header="MapTo" Width="122" Binding="{Binding Item2}"/>
<DataGridTextColumn Header="Name" Width="121" Binding="{Binding Item3}"/>

<DataGridTemplateColumn Header="Controller">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding DataGridChecked}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

<DataGridTemplateColumn Header="Service">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding DataGridChecked}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

<DataGridTemplateColumn Header="Injection">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding DataGridChecked}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

</DataGrid.Columns>

</DataGrid>

我实际上想做的是循环所有包含复选框的 3 列以查看其中哪些被选中,如果同一行中的 3 个中的任何一个被选中,那么我需要将该行的所有 3 个字符串值发送到一些变量。任何人都可以帮助我。例如,我不知道如何从数据网格中的复选框获取 isSelected 属性。我进行了大量研究,但我所能找到的只是 DataGridView 的示例,几乎没有找到 DataGrid 的示例。

最佳答案

不是使用 Tuple 创建您自己的类,而是说 RowData 以及您想要显示为列的所有属性:

public class RowData: INotifyPropertyChanged
{
//implement INotifyPropertyChanged

public string Type { get; set; }
public string MapTo { get; set; }
public string Name { get; set; }
public bool Controller { get; set; }
public bool Service { get; set; }
public bool Injection { get; set; }
}

更改 ObservableCollection 以使用您的类型

public ObservableCollection<RowData> MyObsCollection { get { .... } }

并在 DataGrid 上设置 AutoGenerateColumns="True"

<DataGrid 
Grid.Column="0"
Grid.RowSpan="2"
AutoGenerateColumns="True"
Height="206"
Width="556"
HorizontalAlignment="Left"
Margin="12,265,0,0"
Name="tabela"
VerticalAlignment="Top"
SelectionChanged="tabela_SelectionChanged"
ItemsSource="{Binding MyObsCollection}"/>

然后要获取选中 3 个 CheckBoxes 中的任何一个的项目,您可以执行以下操作:

var selectedList = MyObsCollection.Where(n => n.Controller || n.Service || n.Injection).ToList();

关于c# - 如果在数据网格 C# 中选中复选框,则获取整行值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21712247/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com