将字段绑定到数据库并在XamDataGrid中显示

如何解决将字段绑定到数据库并在XamDataGrid中显示

早上好

在将所有XamComboBoxEditor字段绑定到XamDataGrid时,我面临着一个很大的问题

在我的数据库中,我有2个表:

帐户

index

和Acc_Link

snapshot.data.documents[index].documentID

我需要在XamDataGrid 3组合框列中显示:

帐户标题组合框,其中包含Acc_Link表中的所有Acc_LinkTitles

包含帐户表中所有代码的代码组合框

“名称”组合框,其中包含“帐户”表中的所有名称

为了方便我的工作,我创建了一个名为Acc_LinkObsrvable的类,其中包含上述字段

但是无论我如何尝试,运行代码时XamDataGrid都不会显示任何内容。我尝试将代码添加到main的FieldInitialized事件中,以便在代码运行时加载该代码,但再次没有出现

我将发布我的代码,请帮助我。

Acc_LinkObsrvable类:

public int AccountId { get; set; }
public string Code { get; set; }
public string Code2 { get; set; }
public string Name { get; set; }
public int Parent { get; set; }

XAML:

public int Acc_LinkId { get; set; }
public string Acc_LinkTitle { get; set; }

在主窗口中:

public string Acc_LinkTitle { get; set; }
public string Code { get; set; }
public string Name { get; set; }

解决方法

Acc_LinkObservable类应实现INotifyPropertyChanged接口。例如:

  public class Acc_LinkObservable : INotifyPropertyChanged
    {     
        public Acc_LinkObservable(string title,string code,string name)
        {
            _acc_LinkTitle = title;
            _code = code;
            _name = name;
        }

        public string Acc_LinkTitle
        {
            get { return _acc_LinkTitle; }
            set
            {
                if (_acc_LinkTitle != value)
                {
                    _acc_LinkTitle = value;
                    NotifyPropertyChanged("Acc_LinkTitle");
                }
            }
        }

        public string Code
        {
            get { return _code; }
            set
            {
                if (_code != value)
                {
                    _code = value;
                    NotifyPropertyChanged("Code");
                }
            }
        }

        public string Name
        {
            get { return _name; }
            set
            {
                if (_name != value)
                {
                    _name = value;
                    NotifyPropertyChanged("Name");
                }
            }
        }

        public string _acc_LinkTitle;
        public string _code;
        public string _name;

        public event PropertyChangedEventHandler PropertyChanged;
        private void NotifyPropertyChanged(String info)
        {
            PropertyChanged?.Invoke(this,new PropertyChangedEventArgs(info));
        }
    }

之后,可以如下定义XamDataGrid的数据源: ObservableCollection<Acc_LinkObservable> AccountInfo

因此在XAML中:<igDP:XamDataGrid DataSource= "{Binding Path=AccountInfo}"

现在必须填写AccountInfo

从数据绑定路径中删除 AccountDTO

 AlternateBinding = new Binding("Name"),

检查style3(样式1代替样式3)的定义中可能出现的打印错误:

Style style3 = new Style(typeof(XamComboEditor));
style1.Setters.Add(new Setter(XamComboEditor.ItemsProviderProperty,name_provider)); 
,

此示例演示了不同的方法。 XAML中定义的所有字段。然后使用ComboBoxField代替XamComboEditor。

MainWindow.xaml

<Window x:Class="XamDataGridDemo.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"           
        xmlns:igWPF="http://infragistics.com/DataPresenter"        
        xmlns:igDP="http://infragistics.com/DataPresenter"        
        xmlns:viewModel="clr-namespace:XamDataGridDemo.ViewModel"
        Title="XamDataGrid Demo" Height="350" Width="525" >
    
    <Window.Resources>
        <ResourceDictionary>
            <viewModel:CategoriesList x:Key="Categories" />
        </ResourceDictionary>
    </Window.Resources>
    <Grid>
        <igWPF:XamDataGrid x:Name="xamDataGrid1" DataSource="{Binding Path=Products}" Margin="10" >
            
            <igDP:XamDataGrid.FieldLayoutSettings>
                <igDP:FieldLayoutSettings SelectionTypeRecord="None" SelectionTypeField="None" SelectionTypeCell="None" 
                                          AutoGenerateFields="False" HeaderPrefixAreaDisplayMode="None" RecordSelectorLocation="None" >
                </igDP:FieldLayoutSettings>
            </igDP:XamDataGrid.FieldLayoutSettings>
           
            <igDP:XamDataGrid.FieldLayouts>
                <igDP:FieldLayout>
                    <igDP:FieldLayout.Fields>
                        <igDP:Field Label="Name" BindingType="UseAlternateBinding" AlternateBinding="{Binding Path=Name}" HorizontalContentAlignment="Right">
                            <igDP:Field.Settings>
                                <igDP:FieldSettings Width="Auto" AllowEdit="True" />
                            </igDP:Field.Settings>
                        </igDP:Field>
                        <igDP:ComboBoxField Name="Category" Label="Category"
                                            ItemsSource="{Binding Source={StaticResource Categories}}"
                                            DisplayMemberPath="Name" />

                        <igDP:Field Label="Stock" BindingType="UseAlternateBinding" AlternateBinding="{Binding Path=Stock}" HorizontalContentAlignment="Right">
                            <igDP:Field.Settings>
                                <igDP:FieldSettings Width="Auto" AllowEdit="True" />
                            </igDP:Field.Settings>
                        </igDP:Field>
                    </igDP:FieldLayout.Fields>
                </igDP:FieldLayout>
            </igDP:XamDataGrid.FieldLayouts>
        </igWPF:XamDataGrid>
    </Grid>    
</Window>

MainWindow.xaml.cs

using System.Windows;
using System.Collections.ObjectModel;

namespace XamDataGridDemo
{
    public partial class MainWindow : Window
    {
        ObservableCollection<Product> Products = new ObservableCollection<Product>()
        {
            new Product("Porsche 911","Car",123),new Product("Lenox","Bicycle",45),new Product("Horizon","Boat",67)
        };

        public MainWindow()
        {
            InitializeComponent();
            xamDataGrid1.DataSource = Products;
        }
    }
}

CategoriesList.cs

using System.Collections.ObjectModel;
using Infragistics.Samples.Shared.Models;

namespace XamDataGridDemo.ViewModel
{
    public class CategoriesList : ObservableCollection<CategoryItem>
    {
        public CategoriesList()
        {
            this.Add(new CategoryItem() { Name = "Car" });
            this.Add(new CategoryItem() { Name = "Bicycle" });
            this.Add(new CategoryItem() { Name = "Boat" });
        }
    }

    public class CategoryItem : ObservableModel
    {
        private string _name;
        public string Name
        {
            get
            {
                return this._name;
            }
            set
            {
                if (this._name != value)
                {
                    this._name = value;
                    this.OnPropertyChanged("Name");
                }
            }
        }
    }
}

Product.cs

using System;
using System.ComponentModel;

namespace XamDataGridDemo
{
    public class Product : INotifyPropertyChanged
    {     
        public Product(string name,string category,int stock)
        {
            _name = name;
            _category = category;
            _stock = stock;
        }

        public string Name
        {
            get { return _name; }
            set
            {
                if (_name != value)
                {
                    _name = value;
                    NotifyPropertyChanged("Name");
                }
            }
        }

        public string Category
        {
            get { return _category; }
            set
            {
                if (_category != value)
                {
                    _category = value;
                    NotifyPropertyChanged("Category");
                }
            }
        }

        public int Stock
        {
            get { return _stock; }
            set
            {
                if (_stock != value)
                {
                    _stock = value;
                    NotifyPropertyChanged("Stock");
                }
            }
        }

        public string _name;
        public string _category;
        public int _stock;

        public event PropertyChangedEventHandler PropertyChanged;
        private void NotifyPropertyChanged(String info)
        {
            PropertyChanged?.Invoke(this,new PropertyChangedEventArgs(info));
        }
    }
}

以下类是从Infragistics SDK复制的。

ObservableModel.cs

using System.ComponentModel;
using System.Runtime.Serialization;

namespace Infragistics.Samples.Shared.Models
{
    [DataContract]
    public abstract class ObservableModel : INotifyPropertyChanged 
    {
        protected ObservableModel()
        {
            IsPropertyNotifyActive = true;
        }

        #region INotifyPropertyChanged  

        public bool IsPropertyNotifyActive { get; set; }

        public event PropertyChangedEventHandler PropertyChanged;
        
        protected bool HasPropertyChangedHandler()
        {
            PropertyChangedEventHandler handler = this.PropertyChanged;
            return handler != null;
        }
        protected void OnPropertyChanged(object sender,PropertyChangedEventArgs e)
        {
            PropertyChangedEventHandler handler = this.PropertyChanged;
            if (handler != null && IsPropertyNotifyActive)
                handler(sender,e);
        }
        protected void OnPropertyChanged(PropertyChangedEventArgs e)
        {
            OnPropertyChanged(this,e);
        }
        protected void OnPropertyChanged(object sender,string propertyName)
        {
            OnPropertyChanged(sender,new PropertyChangedEventArgs(propertyName));
        }
        protected virtual void OnPropertyChanged(string propertyName)
        {
            OnPropertyChanged(this,new PropertyChangedEventArgs(propertyName));
        }
        protected delegate void PropertyChangedDelegate(object sender,string propertyName);

        #endregion
    }
}

如果运行此代码,则应用程序窗口将如下所示:

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-