在WPF设计中有一个DataGrid表格,可以修改,共4行3列,其列的格式都为DataGridTextColumn,现在双击修改表中某个单元格数据之后,会弹窗提示“原数值是××,修改后的数值是××”,同时DataGrid表格数据自动刷新显示最新的修改后的数据,请给出完整的实例和代码
时间: 2023-09-20 14:10:51 浏览: 123
好的,这里给出一个完整的WPF应用程序示例,包含一个DataGrid表格和修改单元格时的提示弹窗和数据刷新功能。
XAML代码:
```xml
<Window x:Class="DataGridExample.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="DataGrid Example" Height="350" Width="525">
<Grid>
<DataGrid x:Name="dataGrid" AutoGenerateColumns="False" CanUserAddRows="False" CanUserDeleteRows="False"
SelectionMode="Single" Margin="10">
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Name}" Width="*" />
<DataGridTextColumn Header="Age" Binding="{Binding Age}" Width="*" />
<DataGridTextColumn Header="Email" Binding="{Binding Email}" Width="*" />
</DataGrid.Columns>
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<EventSetter Event="MouseDoubleClick" Handler="OnRowDoubleClick" />
</Style>
</DataGrid.RowStyle>
</DataGrid>
</Grid>
</Window>
```
代码中定义了一个DataGrid表格,包含3列,分别为姓名、年龄和电子邮件。同时设置了表格的样式,当用户双击某一行时,会触发OnRowDoubleClick事件。
MainWindow.xaml.cs代码:
```csharp
using System.Collections.ObjectModel;
using System.Windows;
namespace DataGridExample
{
public partial class MainWindow : Window
{
private ObservableCollection<Person> _people;
public MainWindow()
{
InitializeComponent();
// 初始化数据
_people = new ObservableCollection<Person>
{
new Person {Name = "张三", Age = 18, Email = "zhangsan@xxx.com"},
new Person {Name = "李四", Age = 20, Email = "lisi@xxx.com"},
new Person {Name = "王五", Age = 22, Email = "wangwu@xxx.com"},
new Person {Name = "赵六", Age = 24, Email = "zhaoliu@xxx.com"}
};
dataGrid.ItemsSource = _people;
}
private void OnRowDoubleClick(object sender, RoutedEventArgs e)
{
var row = sender as System.Windows.Controls.DataGridRow;
var person = row.Item as Person;
var oldValue = person.Age;
var newValue = oldValue;
// 弹窗提示
var dialogResult = MessageBox.Show($"原数值是{oldValue},请输入新数值", "提示", MessageBoxButton.OKCancel);
if (dialogResult == MessageBoxResult.OK)
{
// 获取用户输入的新数值
var inputText = Microsoft.VisualBasic.Interaction.InputBox("请输入新数值", "修改数值", oldValue.ToString());
if (!string.IsNullOrEmpty(inputText))
{
// 将用户输入的文本转换为整数
if (int.TryParse(inputText, out newValue))
{
// 更新数据并刷新表格
person.Age = newValue;
dataGrid.Items.Refresh();
}
else
{
MessageBox.Show("输入的不是有效的整数!", "错误");
}
}
}
}
}
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public string Email { get; set; }
}
}
```
代码中定义了一个Person类,用于存储人员信息,包括姓名、年龄和电子邮件。MainWindow类中初始化数据,并在OnRowDoubleClick事件中处理双击事件。在事件处理程序中,首先获取双击的行和对应的Person对象,然后弹窗提示用户修改数据,获取用户输入的新数值并进行验证,最后更新数据并刷新表格。
运行程序,可以看到表格中的数据,双击某个单元格后会弹出提示框,用户可以输入新数值并保存,保存后表格数据会自动刷新显示最新的修改后的数据。
阅读全文