首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

UWP DataGrid列绑定到可以为空的双精度值,但修改单元格不会修改该属性

基础概念

UWP(Universal Windows Platform)是微软推出的一个用于构建跨平台应用的框架。DataGrid 是 UWP 中用于显示和编辑数据的控件。双精度值(double)是一种数值类型,可以表示非常大或非常小的数值,并且可以为空(null)。

相关优势

使用 DataGrid 绑定到可以为空的双精度值有以下优势:

  1. 灵活性:允许数据中存在缺失值。
  2. 数据完整性:通过允许 null 值,可以更好地表示数据的完整性。
  3. 用户友好:用户在编辑时可以选择不输入值,系统会自动将其视为 null

类型与应用场景

类型

  • Nullable<double> 或简写为 double? 表示可以为空的双精度值。

应用场景

  • 财务报表中某些字段可能暂时没有数据。
  • 科学计算中某些测量结果可能无效或缺失。
  • 数据库中的某些字段允许空值。

遇到的问题及原因

问题描述: 修改 DataGrid 单元格不会更新绑定的属性值。

原因分析

  1. 数据绑定问题:可能是数据绑定的路径不正确或不完整。
  2. 属性变更通知:绑定的属性可能没有实现 INotifyPropertyChanged 接口,导致 UI 无法及时更新。
  3. 单元格编辑模板DataGrid 的单元格编辑模板可能没有正确配置。

解决方案

步骤 1:确保数据模型实现 INotifyPropertyChanged

代码语言:txt
复制
public class MyDataModel : INotifyPropertyChanged
{
    private double? _myValue;
    public double? MyValue
    {
        get => _myValue;
        set
        {
            if (_myValue != value)
            {
                _myValue = value;
                OnPropertyChanged(nameof(MyValue));
            }
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    protected void OnPropertyChanged(string propertyName)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

步骤 2:正确绑定 DataGrid

在 XAML 中:

代码语言:txt
复制
<DataGrid x:Name="dataGrid" AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTextColumn Header="My Value" Binding="{Binding MyValue, Mode=TwoWay}" />
    </DataGrid.Columns>
</DataGrid>

步骤 3:确保数据源正确设置

在代码后台:

代码语言:txt
复制
public ObservableCollection<MyDataModel> DataItems { get; set; } = new ObservableCollection<MyDataModel>();

// 初始化数据
DataItems.Add(new MyDataModel { MyValue = 123.45 });
DataItems.Add(new MyDataModel { MyValue = null });

dataGrid.ItemsSource = DataItems;

示例代码

完整的示例代码如下:

MyDataModel.cs:

代码语言:txt
复制
public class MyDataModel : INotifyPropertyChanged
{
    private double? _myValue;
    public double? MyValue
    {
        get => _myValue;
        set
        {
            if (_myValue != value)
            {
                _myValue = value;
                OnPropertyChanged(nameof(MyValue));
            }
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    protected void OnPropertyChanged(string propertyName)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

MainPage.xaml:

代码语言:txt
复制
<Page
    x:Class="YourNamespace.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:YourNamespace">

    <Grid>
        <DataGrid x:Name="dataGrid" AutoGenerateColumns="False">
            <DataGrid.Columns>
                <DataGridTextColumn Header="My Value" Binding="{Binding MyValue, Mode=TwoWay}" />
            </DataGrid.Columns>
        </DataGrid>
    </Grid>
</Page>

MainPage.xaml.cs:

代码语言:txt
复制
public sealed partial class MainPage : Page
{
    public ObservableCollection<MyDataModel> DataItems { get; set; } = new ObservableCollection<MyDataModel>();

    public MainPage()
    {
        this.InitializeComponent();

        // 初始化数据
        DataItems.Add(new MyDataModel { MyValue = 123.45 });
        DataItems.Add(new MyDataModel { MyValue = null });

        dataGrid.ItemsSource = DataItems;
    }
}

通过以上步骤和代码示例,可以确保 DataGrid 中的双精度值在编辑后能够正确更新绑定的属性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

常见 Datagrid 错误

虽然 Datagrid 控件易于使用,但同样易于给使用者带来麻烦。以下是许多人所犯的一些错误,这些人包括从初学者到富有经验的 .NET 专家。...可以使用 Datagrid 创建列表数据而没有使用 我知道您不会再使用如下所示的代码,但 ASP.NET 领域中许多守旧的用户仍在继续使用它们: Response.Write("") While...例如,Datagrid 处于“Edit”(编辑)模式时,忽略该项检查将导致已编辑的值被数据源中的原始值覆盖。然而,该规则至少有一个主要的例外,请参阅持续使用大型 ViewState。...问题在于数据仅在页面第一次被调用时绑定到网格。...添加单元格到 Datagrid 的表格输出时,这些事件可以用于控制每个单元格的外观或内容。例如,可以基于数值的范围修改单元格的背景颜色。

2.4K20

GridView隐藏列取值解决方案

,则不会进行数据绑定,也就是说无法直接从GridView中取到这个列内的文本。...,则不会进行数据绑定,也就是说无法直接从GridView中取到这个列内的文本。...这一功能在DataGrid时代几乎是必须的,在对列表进行批量选中操作时非常有用(比如批量删除),隐藏列通常用于存储DataGrid行对应数据记录的关键字的值,而现在在GridView中却行不通,着实令一大批人头疼不已...,分别设置FootStyle,HeaderStyle,ItemStyle的CssClass属性为“hidden” Ok,这样我们就实现了隐藏列的目的,同时又能保证对其进行数据绑定。...DataKeys集合来获取某一行的键值,例如假设想获取第i行的id键值,其代码如下: //获取第i行的id键值,注意该索引即行的索引,从header到footer都算在内 string id

1.5K30
  • day51_BOS项目_03

    2.2、收派标准 功能概述:     将承接的货物,按照重量和体积两个标准,双纬度定义货物的标准。以便将不同标准的货物分给不同收取和派送能力的人员。由运营部门制定。...数据网格(datagrid)的设计目的是为了减少开发时间,且不要求开发人员具备指定的知识。它是轻量级的,但是功能丰富。它的特性包括单元格合并,多列页眉,冻结列和页脚,等等。...5、基于datagrid实现取派员分页查询 第一步:修改staff.jsp页面中datagrid的URL地址,访问action     // 取派员信息表格     $('#grid').datagrid...for(var i=0; i<rows.length; i++) {                 var id = rows[i].id; // 获取属性id的值                 array.push... 列(Column)属性中,单元格的格式化函数:formatter     // 定义列     var columns = [ [ {         field : 'id',

    3.4K10

    C#二十八 数据绑定

    简单绑定是指将一个控件的某个属性绑定到某个数据元素(如数据集表中列的值)的能力,这是用于TextBox或Label等控件的典型绑定类型。...复杂绑定指将一个控件绑定到多个数据元素的能力,通常绑定到数据库的多条记录,如DataGridView就可以绑定到一个DataTable,一次显示多条记录和多个字段的值。...除了行和列外,DataGridView控件还有列标题和行标题,列标题和行标题没有对应的类,但DataGridView控件中有很多属性可以设置这两个组成部分的外观。...(); } DataGridView控件提供了CurrentCellAddress属性来获得选中单元格的列表和行标,如下代码修改DataGridView中选中的单元格中对应表中项的值: privatevoid...//显示当前单元格的值 MessageBox.Show(this.dataGridView.Rows[x].Cells[y].Value.ToString());// //修改此单元格对应的数据表中项的值

    11110

    asp.net中显示DataGrid控件列序号的几种方法

    在aps.net中多数据绑定的控件很多,论功能来说,应该属DataGrid最为齐全,但它没有提供现成的显示记录序号的功能,不过我们可以通过它所带的一些参数来间接得到序号,下面来看看怎样得到和显示序号值计算方式如下...(1) 使用DataGrid的ItemCreated设置值,而前台的单元格可以是绑定列或者模板列(包括空模板); (2) 使用DataGrid的ItemDataBound设置值,而前台的单元格可以是绑定列或者模板列...(包括空模板); (3) 在前台直接绑定计算表达式; (4) 在后台类中编写方法计算表达式由前台页面类继承调用。...只是处理的时间不同而已;对于第三种我认为最简单,直接在前台页面绑定,不需要额外的辅助;对于第四种的方法绑定到前台我认为最为灵活,需要注意的是GetRecordIndex方法需要protected或public...,使它的继承类能访问的到。

    1.6K20

    Spread for Windows Forms高级主题(6)---数据绑定管理

    如果你将多个Spread控件绑定到了一个单一的数据集,你可以将每一个Spread控件中表单的AutoGenerateColumns属性设置为false,这样Spread控件就不会绑定所有的列。...这时你就可以将任意一个Spread控件中的列的DataField属性设置为某一个数据集中的域的名字。这样只有数据集中该列的数据被绑定了这个Spread控件。...下面的表格展示了我们所使用的基于数据类型的单元格类型: 数据类型 单元格类型 布尔值 复选单元格 日期时间 日期时间单元格 双精度浮点值,单精度浮点值,十进制值 数值单元格 16位整型,32位整型,等等...下面的表格展示了我们所使用的基于数据类型的单元格类型: 数据类型 单元格类型 布尔值 复选单元格 日期时间 日期时间单元格 双精度浮点值,单精度浮点值,十进制值 数值单元格 16位整型,32位整型,等等...如果你需要设置子表单的属性,最好是在ChildWorkbookCreated事件中放置这些修改属性的代码。当创建一个新的子表单时,该事件就会被触发。

    2.2K100

    【愚公系列】2023年10月 WPF控件专题 DataGrid控件详解

    以下是一些常用的DataGrid控件属性和方法:属性:AutoGenerateColumns:指定是否自动生成列。ItemsSource:指定数据源。IsReadOnly:指定是否只读。...CancelEdit():取消当前单元格的编辑状态。Sort():对数据进行排序。Refresh():刷新数据。DataGrid还有许多其他的属性和方法,可以根据需求进行使用。...Columns:列集合,可以手动定义和配置每一列的属性。...数据编辑:DataGrid控件可以支持数据的编辑,包括单元格编辑、行编辑和列编辑等方式,方便用户对数据进行修改和更新。...自定义样式和模板:DataGrid控件可以根据用户需要进行自定义样式和模板,可自由修改表格的外观和布局,使数据的展示更加美观和易于阅读。

    1.2K00

    C# WPF DataGrid获取单元格并改变背景色

    01 概述 WPF 自带了一个表格控件datagrid,这个控件类似winfrom中的datagridview,在数据显示的时候也经常会用到,这节主要讲解如何从后台代码获取到单元格控件并改变其相关属性:...> DataGrid> 04 解析 ① 因为我需要绑定SelectedCellsChanged事件,所以前台将默认的行选中模式修改为单元格选中模式: SelectionMode="...Single" SelectionUnit="Cell" 这样修改后SelectionChanged这个事件将不再触发(只有在行选中模式下生效); ②获取选中单元格的值: var info = this.dgSourceData.SelectedCells.FirstOrDefault...;//获取选中单元格列号 ④获取选中行的行号 在SelectionUnit="FullRow" 时候: 可以通过这样获取: rowindex = this.dgSourceData.SelectedIndex...;//获取选中单元格行号 在当SelectionUnit="Cell"时: 我是通过选中单元格对应行的信息和表格控件绑定的集合匹配获取行号的: for (int i = 0; i < ShellViewModel.StudentList.Count

    2.8K20

    kudu可视化工具:kudu-plus

    kudu Kudu是为Apache Hadoop平台开发的列式数据库。Kudu拥有Hadoop生态系统应用程序的常见技术属性:它可以商用硬件上运行,可横向扩展,并支持高可用性操作。...unixtime_micros(Unix时代以来的64位微秒) 单精度(32位)IEEE-754浮点数 双精度(64位)IEEE-754浮点数 十进制(详见十进制类型) UTF-8编码字符串(最多64KB...删除分区将删除属于该分区的平板电脑以及其中包含的数据。后续插入到已删除的分区中将失败。可以添加新分区,但它们不得与任何现有范围分区重叠。...尝试插入具有与现有行相同的主键值的行将导致重复键错误。 主键列必须是非可空的,并且可能不是boolean,float或double类型。 在表创建期间设置后,主键中的列集可能不会更改。...kudu集群所有表 创建kudu表 删除kudu表 重命名kudu表 更新kudu表结构:修改非主键列名、修改非主键列默认值、修改非主键列的是否允许为空、新增非主键字段、删除非主键字段 查看kudu表分区信息

    37730

    dotnet 从入门到放弃的 500 篇文章合集

    本文是记录我从入门到放弃写的博客 博客包括 C#、WPF、UWP、dotnet core 、git 和 VisualStudio 和一些算法,所有博客使用 docx 保存 下载:dotnet 从入门到放弃的...的宽度 win10 uwp 依赖属性 win10 uwp 修改CalendarDatePicker图标颜色 win10 uwp 修改Pivot Header 颜色 win10 UWP 修改密码框文字水平...win10 uwp 禁止编译器优化代码 win10 UWP 等级控件 win10 uwp 线程池 win10 uwp 绑定 OneWay 无法使用 win10 uwp 绑定密码 win10 uwp 绑定静态属性...SharpDx 控件 WPF 修改按钮按下的颜色 WPF 写系统日志 WPF 判断调用方法堆栈 wpf 单例 WPF 只允许打开一个实例 WPF 可获得焦点属性 WPF 在 Alt+Tab 隐藏窗口 WPF...DataGridTextColumn wpf 绑定 TextLength WPF 编译为 AnyCPU 和 x86 有什么区别 WPF 获得触摸精度和触摸点 WPF 获得触笔悬停元素上 WPF 解决

    10.4K20

    深入解析 DataGrid 过滤功能

    默认过滤 把一个IEnumerable数据源绑定到C1DataGrid上,设置CanUserFilter为true,就可以看到默认条件下的过滤结果。...这样做的好处是,如果你需要这些高级特性,那么就添加该dll到项目里。如果不需要,那它不会对项目的size造成影响。 行过滤 另外一种基本的过滤功能可通过典型的过滤行来实现。...全文过滤 C1DataGrid提供了对整个Grid中文本进行过滤的功能,用户可一次性完成所有列的检索或过滤操作。...而这一切,只需为FullTextSearchBehavior属性绑定一个控件,例如:TextBox控件,它就会为你自动完成剩下的工作。...可作为过滤条件的值以选择列表的形式显示,用户可以选择那些值显示,那些不显示,这为拥有唯一或者重复值的列提供了非常有效的过滤方式(例如:类别或类型列)。你可以通过两种方法实现多值过滤功能。

    2.9K70

    了解模板化控件(10):原则与技巧

    使用依赖属性:控件的使用者会认为所有控件的属性都是可以绑定的,除非有特殊理由不要破坏这个约定俗成的规则。...可以使用-ex做后缀,但容易和扩展方法类混淆。 ItemsControl派生类的子元素控件要使用父元素名称做前缀、-Item做后缀,譬如ComboBox的子元素ComboBoxItem。...一个完整的依赖属性定义可以有20行(属性标识符、属性包装器、PropertyChangedCallback等),而且其中一部分是静态的,另外一部分不是,在类中将一个依赖属性的所有部分放在一起,还是按静态...一个好的做法是使用单独的partial 类存放所有依赖属性,具体可参考UWPCommunityToolkit的AdaptiveGridView.Properties.cs。...职业生涯中看过很多程序员都不会写模板化控件(毕竟大部分场景使用UserControl或修改ControlTemplate就能解决),希望这个系列可以帮到想要学习模板化控件的开发者。

    89330

    OEA 中 WPF 树型表格虚拟化设计方案

    假设只有 30 行,一个单元格仅生成 5 个可视元素,200 列的单元格都会产生 3W 个可视元素,而布局系统的 Measure 方法需要对可视树中的每一个元素都调用其对应的 Measure 方法,可以想象...默认为 False 时,ScollViewer 自己实现了滚动逻辑,在 Measure 时会把 Infinite 传给 Content 元素;而当该值被设置为 True时,ScrollViwer 认为它的...下图是 DataGrid 打开行、列虚拟化功能后生成的可视树: ?    ...DataGridRow.DataContext 对象,列表的长度就是表格列的个数,这样就可以生成和列的个数一致的单元格个数。...目前暂时设定为,当列数超过 50 的时候,该表格会自动打开列虚拟化功能,提升渲染性能。

    2.7K70

    jQuery EasyUI 详解

    easyui 是个完美支持 HTML5 网页的完整框架。 easyui 节省您网页开发的时间和规模。 easyui 很简单但功能强大的。...名称 类型 说明 默认值 title string 列的标题文字。 undefined field string 列的字段名。 undefined width number 列的宽度。...undefined formatter function 单元格的格式化函数,需要三个参数:value: 字段的值。rowData: 行的记录数据。 rowIndex: 行的索引。...undefined styler function 单元格的样式函数,返回样式字符串来自定义此单元格的样式,例如 background:red 。此函数需要三个参数: value: 字段的值。 ...mergeCells options 把一些单元格合并为一个单元格,options 参数包括下列特性:index:列的索引。field:字段名。rowspan:合并跨越的行数。

    9.2K10

    c#实战教程_ps初学者入门视频

    值参数 当用值参数向方法传递参数时,程序给实参的值做一份拷贝,并且将此拷贝传递给该方法,被调用的方法不会修改实参的值,所以使用值参数时,可以保证实参的值是安全的。...重载它,让它能够分别返回整数、长整数和双精度参数的二次根。 22. 重新设计complex类,完成复数的+、-、*、/四则运算。 23....如允许多选,该属性返回选择的索引号最小的条目。如一个也没选,该值为空。  属性SelectedItems:返回所有被选条目的内容,是一个字符串数组。...工具条的组成及功能 放工具条控件ToolBar到窗体中,可以为该窗体增加一个工具条。...放三个Label控件到窗体,修改属性Text分别为:学号、姓名、性别。 (2) 放三个TextBox控件到窗体,修改属性Text都为空。

    15.7K10

    在DataGrid中显示图片

    兼谈 DadaGrid 模板列的创建     DadaGrid 是 ASP.NET 编程中一个很重要的控件,其优良的可定制功能为提高它的表现力提供了极大的方便。...除了与数据源直接绑定以外,我们还可以通过列绑定模板对 DataGrid 的列进行自定义,来按照我们设定的格式显示数据。     ...例如,数据表中有一个字段 f_DemoImage 用来存放图片的路径(包括图片文件名),为了在 DataGrid 的 Cell 中显示实际的图片,我们可以定义一个模板列,然后给该列赋予字段 f_DemoImage...的值,就可以在 DataGrid 的 Cell 中显示图片。...InitializeComponent(); base.OnInit(e); } /// /// 设计器支持所需的方法 - 不要使用代码编辑器修改此方法的内容。

    3.4K30
    领券