Следующий код WPF отображает содержимое FirstName и ZipCode в WPF Toolkit DataGrid .
Однако я не хочу просто отображать данные такими, какие они есть, а слегка измененными , например. Я мог бы хотеть отобразить все почтовые индексы для отображения с «-0000» в конце, или я могу хотеть отобразить « n / a », если ячейка пуста.
Я смог найти только CopyingCellClipboardContent , который, кажется, не выполняет то, что я хочу.
Я думаю, мне может понадобиться конвертер , но я не уверен, как это сделать в этом примере.
Как я могу манипулировать содержимым ячеек DataGrid во время выполнения?
XAML:
<Window x:Class="TestControl3423.Window2"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:tk="http://schemas.microsoft.com/wpf/2008/toolkit"
Title="Window2" Height="300" Width="500">
<StackPanel>
<tk:DataGrid x:Name="dataGrid"
Margin="0 0 0 10"
AutoGenerateColumns="False"
CanUserAddRows="False"
HeadersVisibility="Column"
MaxHeight="400"
IsReadOnly="True"
Background="#fff"
ColumnWidth="SizeToHeader">
</tk:DataGrid>
</StackPanel>
</Window>
Код сзади:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows;
using System.Windows.Data;
using System.Windows.Documents;
using Microsoft.Windows.Controls;
namespace TestControl3423
{
public partial class Window2 : Window
{
public Window2()
{
InitializeComponent();
dataGrid.ItemsSource = Customer.GetCustomers();
dataGrid.Columns.Clear();
DataGridTextColumn dgtc1 = new DataGridTextColumn();
dgtc1.Header = "First Name";
dgtc1.Binding = new Binding("FirstName");
dgtc1.Width = new DataGridLength(1, DataGridLengthUnitType.Auto);
dataGrid.Columns.Add(dgtc1);
DataGridTextColumn dgtc2 = new DataGridTextColumn();
dgtc2.Header = "Zip Code";
dgtc2.Binding = new Binding("ZipCode");
dgtc2.Width = new DataGridLength(1, DataGridLengthUnitType.Auto);
dgtc2.CopyingCellClipboardContent += new EventHandler<DataGridCellClipboardEventArgs>(dgtc2_CopyingCellClipboardContent);
dataGrid.Columns.Add(dgtc2);
}
void dgtc2_CopyingCellClipboardContent(object sender, DataGridCellClipboardEventArgs e)
{
DataGridTextColumn dgtc = sender as DataGridTextColumn;
dgtc.SetValue(dgtc.GetValue() + "-0000"); //ERROR
}
}
public class Customer
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Street { get; set; }
public string Location { get; set; }
public string ZipCode { get; set; }
public static List<Customer> GetCustomers()
{
List<Customer> customers = new List<Customer>();
customers.Add(new Customer { FirstName = "Jim", LastName = "Jones", ZipCode = "23434" });
customers.Add(new Customer { FirstName = "Joe", LastName = "Adams", ZipCode = "12312" });
customers.Add(new Customer { FirstName = "Jake", LastName = "Johnson", ZipCode = "23111" });
customers.Add(new Customer { FirstName = "Angie", LastName = "Reckar", ZipCode = "54343" });
customers.Add(new Customer { FirstName = "Jean", LastName = "Anderson", ZipCode = "16623" });
return customers;
}
}
}