- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个包含数百行和两列数据的 DataGrid。我需要以编程方式选择 DataGrid 中的特定行和特定单元格,并将它们输出到 Excel 工作表上。在做了一些研究之后,似乎获得单元格值的唯一方法是编写一个辅助函数,并且每次获得一个单元格值时辅助函数都会运行。
是否有更简单/更快捷的方法来获取 DataGrid 中特定单元格的值?或者,当每个单元格值转到 DataGrid 并将数组输出到 Excel 而不是 DataGrid 时,我是否应该同时将每个单元格值存储到一个数组中?
最佳答案
假设 DataGrid
显示员工信息,我们为每个员工存储他的 Id
、Name
和 Address
。让我们为每个员工属性添加一个额外的 bool 属性(例如 Id
和 IsIdSelected
、Name
和 IsNameSelected
)这个 bool 值属性将绑定(bind)到 DataGrid.IsSelected
属性,因此,它表示单元格是否被选中,您也可以通过将其设置为 来使用它以编程方式选择显示指定属性的单元格>正确
。见以下代码:
/// <summary>
/// A class that represents an employee. Notice that with each property
/// (e.g. Id) there is a Boolean property that has a similar name (e.g. IsIdSelected)
/// this Boolean property will be bound to the relevant DataGridCell.IsSelected
/// property to indicate whether the cell representing this property were selected
/// or not. In other words if you want to know the selected properties at any moment
/// you just need to iterate through the employees collection, and examine each
/// Boolean property for each property :D
/// </summary>
public class Employee
{
public int? Id { get; set; }
public bool IsIdSelected { get; set; }
public string Name { get; set; }
public bool IsNameSelected { get; set; }
public string Address { get; set; }
public bool IsAddressSelected { get; set; }
}
背后的代码:
using System.Collections.ObjectModel;
using System.Windows;
namespace CellSelection
{
public partial class MainWindow : Window
{
/// <summary>
/// The DataGrid will be bound to this collection
/// </summary>
private ObservableCollection<Employee> _collection;
public MainWindow()
{
InitializeComponent();
// Initialize the employees collection with some test data
_collection =
new ObservableCollection<Employee>
{
new Employee {Id = 1, Name = "Mohammed A. Fadil", Address = "..."},
new Employee {Id = 485, Name = "Khalid Zein", Address = "..."},
new Employee {Id = 64, Name = "Ahmed Mubarak", Address = "..."},
new Employee {Id = 364, Name = "Ali Ebraheim", Address = "..."},
};
DataContext = _collection;
}
private void OnExportButtonClick(object sender, RoutedEventArgs e)
{
// Now, concatinate all the selected cells
var str = string.Empty;
foreach (var emp in _collection)
{
if (emp.IsIdSelected)
str += string.Format("{0}, ", emp.Id);
if (emp.IsNameSelected)
str += string.Format("{0}, ", emp.Name);
if (emp.IsAddressSelected)
str += string.Format("{0}", emp.Address);
str += "\n";
}
// Instead of displaying this message you could export these cells to Excel
// in the format you need.
MessageBox.Show(str);
}
}
}
XAML 代码:
<Window x:Class="CellSelection.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="275*" />
<RowDefinition Height="36*" />
</Grid.RowDefinitions>
<DataGrid ItemsSource="{Binding}" AutoGenerateColumns="False"
SelectionMode="Extended" SelectionUnit="CellOrRowHeader">
<DataGrid.Columns>
<DataGridTextColumn Header="Id" Binding="{Binding Id}">
<DataGridTextColumn.CellStyle>
<Style TargetType="DataGridCell">
<Setter Property="IsSelected">
<Setter.Value>
<Binding Path="IsIdSelected" Mode="TwoWay"
UpdateSourceTrigger="PropertyChanged"/>
</Setter.Value>
</Setter>
</Style>
</DataGridTextColumn.CellStyle>
</DataGridTextColumn>
<DataGridTextColumn Header="Name" Binding="{Binding Name}">
<DataGridTextColumn.CellStyle>
<Style TargetType="DataGridCell">
<Setter Property="IsSelected">
<Setter.Value>
<Binding Path="IsNameSelected" Mode="TwoWay"
UpdateSourceTrigger="PropertyChanged"/>
</Setter.Value>
</Setter>
</Style>
</DataGridTextColumn.CellStyle>
</DataGridTextColumn>
<DataGridTextColumn Header="Address" Binding="{Binding Address}">
<DataGridTextColumn.CellStyle>
<Style TargetType="DataGridCell">
<Setter Property="IsSelected">
<Setter.Value>
<Binding Path="IsAddressSelected" Mode="TwoWay"
UpdateSourceTrigger="PropertyChanged"/>
</Setter.Value>
</Setter>
</Style>
</DataGridTextColumn.CellStyle>
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
<Button Content="Export Selection" Grid.Row="1" HorizontalAlignment="Right"
Click="OnExportButtonClick" Margin="5"/>
</Grid>
</Window>
请注意,对于每个 DataGrid
列,您必须添加一个 CellStyle
,将每个列指定的 bool 属性绑定(bind)到它的 DataGridCell.IsSelected
属性,将此绑定(bind)模式设置为 Mode="TwoWay"
以支持以编程方式选择单元格(在这种情况下,您必须在 Employee
类)。
使用此解决方案,您不再需要辅助函数,也不再需要访问 DataGrid
实际单元格,只需遍历您的集合、确定所选属性并根据需要处理它们。
关于c# - 在DataGrid中选择多个单元格并输出到Excel工作表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5550033/
是否有某种方法可以使用 JPA 或 Hibernate Crtiteria API 来表示这种 SQL?或者我应该将其作为 native 执行吗? SELECT A.X FROM (SELECT X,
在查询中, select id,name,feature,marks from (....) 我想删除其 id 在另一个 select 语句中存在的那些。 从 (...) 中选择 id 我是 sql
我想响应用户在 select 元素中选择一个项目。然而这个 jQuery: $('#platypusDropDown').select(function () { alert('You sel
这个问题在这里已经有了答案: SQL select only rows with max value on a column [duplicate] (27 个回答) 关闭8年前。 我正在学习 SQL
This question already has answers here: “Notice: Undefined variable”, “Notice: Undefined index”, and
我在 php 脚本中调用 SQL。有时“DE”中没有值,如果是这种情况我想从“EN”中获取值 应该是这样的,但不是这样的 IF (EXISTS (SELECT epf_application_deta
这可能是一个奇怪的问题,但不知道如何研究它。执行以下查询时: SELECT Foo.col1, Foo.col2, Foo.col3 FROM Foo INNER JOIN Bar ON
如何在使用 Camera.DestinationType.FILE_URI. 时在 phonegap camera API 中同时选择或拾取多个图像我能够一次只选择一张图像。我可以使用 this 在
这是一个纯粹的学术问题。这两个陈述实际上是否相同? IF EXISTS (SELECT TOP 1 1 FROM Table1) SELECT 1 ELSE SELECT 0 相对 IF EXIS
我使用 JSoup 来解析 HTML 响应。我有多个 Div 标签。我必须根据 ID 选择 Div 标签。 我的伪代码是这样的 Document divTag = Jsoup.connect(link
我正在处理一个具有多个选择框的表单。当用户从 selectbox1 中选择一个选项时,我需要 selectbox2 active 的另一个值。同样,当他选择 selectbox2 的另一个值时,我需要
Acme Inc. Christa Woods Charlotte Freeman Jeffrey Walton Ella Hubbard Se
我有一个login.html其中form定义如下: First Initial Plus Last Name : 我的do_authorize如下: "; pri
$.get( 'http://www.ufilme.ro/api/load/maron_online/470', function(data
我有一个下拉列表“磅”、“克”、“千克”和“盎司”。我想要这样一种情况,当我选择 gram 来执行一个函数时,当我在输入字段中输入一个值时,当我选择 pounds 时,我想要另一个函数来执行时我在输入
我有一个 GLSL 着色器,它从输入纹理的 channel 之一(例如 R)读取,然后写入输出纹理中的同一 channel 。该 channel 必须由用户选择。 我现在能想到的就是使用一个 int
我想根据下拉列表中的选定值生成输入文本框。 Options 2 3 4 5 就在这个选择框之后,一些输入字段应该按照选定的数字出现。 最佳答案 我建议您使用响应式(Reac
我是 SQL 新手,我想问一下如何根据首选项和分组选择条目。 +----------+----------+------+ | ENTRY_ID | ROUTE_ID | TYPE | +------
我有以下表结构: CREATE TABLE [dbo].[UTS_USERCLIENT_MAPPING_USER_LIST] ( [MAPPING_ID] [int] IDENTITY(1,1
我在移除不必要的床单时遇到了问题。我查看了不同的论坛并将不同的解决方案混合在一起。 此宏删除工作表(第一张工作表除外)。 Sub wrong() Dim sht As Object Applicati
我是一名优秀的程序员,十分优秀!