none
请教,关于datagrid数据刷新的问题.用的RiaDataSource RRS feed

  • 常规讨论

  • SL3里,我用ChildWindow新增一个数据后,在datagrid中,能刷新增加的数据,但不能显示关联实体的数据.如果重新点一下分页,再返回就行了,可以显示关联实体的数据.

    或者重新截入该控件,也可以正常显示.
    aaaa
    2009年6月11日 9:38

全部回复

  • 你如何绑定的?从ChildWindow如何绑定,提交的?
    2009年6月11日 22:00
  • 在列表usercontrol的cs中

    public Personals()
            {
                companyContext.AddReference(hgCountryContext);
                hgCountryContext.GetHgCountries();
    
                personalContext.AddReference(companyContext);
                companyContext.GetCompanies();
    
                InitializeComponent();
    
                PersonalDataSource.DomainContext = personalContext;
            }
    在列表usercontorl的xaml中
    <riaControls:DomainDataSource x:Name="PersonalDataSource" LoadSize="2" LoadMethodName="GetPersonals" AutoLoad="True">
                    
                   
                    <riaControls:DomainDataSource.SortDescriptors>
                        <riaData:SortDescriptor Direction="Ascending" PropertyPath="Name"/>
                    </riaControls:DomainDataSource.SortDescriptors>
    
                </riaControls:DomainDataSource>
    
    
     <data:DataGrid x:Name="PersonalsDataGrid" ItemsSource="{Binding Data, ElementName=PersonalDataSource}" AutoGenerateColumns="False" IsReadOnly="True" Width="Auto">
                    <data:DataGrid.Columns>
                        <!--<data:DataGridCheckBoxColumn Header="选择" Width="20" Binding="{Binding}"></data:DataGridCheckBoxColumn>-->
                        <data:DataGridTextColumn Header="姓名" Binding="{Binding Name, Mode=TwoWay}" Width="80"></data:DataGridTextColumn>
                        <data:DataGridTextColumn Header="单位名称" Binding="{Binding Company.CompanyName, Mode=TwoWay}" Width="150"></data:DataGridTextColumn>
     </data:DataGrid.Columns>
                </data:DataGrid>
                
                <dataControls:DataPager x:Name="PersonalDataPager"  Source="{Binding Data, ElementName=PersonalDataSource}" PageSize="2" DisplayMode="PreviousNextNumeric"></dataControls:DataPager>



    在childwindow代码cs中.

    private void OnLoaded(object sender, RoutedEventArgs e)
            {
                this.LayoutRoot.DataContext = PersonalEdit;
            }
    在childwindow的xaml中

    <TextBox x:Name="HomePageTextBox" Grid.Row="2" Grid.Column="1" Grid.ColumnSpan="3" Text="{Binding Path=Company.Company, Mode=TwoWay}" ></TextBox>



    aaaa
    • 已编辑 2009年6月12日 2:57 文字显示更分明
    2009年6月12日 2:56
  • 那个PersonalEdit是什么?你怎么把更新的数据 Update到你的DDS 或者 personalContext里的呢?

    我猜你可能某一步自己定义的类型没有实现INotifyPropertyChanged 接口。所以后台数据更新后前台不知道。

    2009年6月12日 7:04
  • PersonalEdit是Personal类,是这样定义的:
    Personal PersonalEdit;

    我的自定义类型没有实现INotifyPropertyChanged,是这样的.

    Personal类是这样定义的

    namespace Oms.Models
    {
        public partial class Personal
        {
            [Key]
            public Guid PersonalId { get; set;}
            public String Name { get; set; }
    //公司信息
            [External]
            [Association("Company", "CompanyId", "CompanyId", IsForeignKey=true)]
            public Company Company
            {
                get; set;
            } } }
    Company类是这样定义的
    namespace Oms.Models
    {
        public partial class Company
        {
            [Key]
            public Guid CompanyId { get; set; }
            public String CompanyName { get; set; }
        }
    }

    aaaa
    2009年6月12日 7:41
  • 那就去实现吧。没什么说的了。

    否则前台UI不知道你后台数据更新了。---直到他需要重新load.
    2009年6月12日 7:56
  • 但为什么Personal类的字段能更新?而Company却不能更新
    aaaa
    2009年6月12日 8:06
  • 那就去实现吧。没什么说的了。

    否则前台UI不知道你后台数据更新了。---直到他需要重新load.


    我把实体实现INotifyPropertyChanged 接口,但还是不行,我觉得应该是External属性设置后,在domainservice生成代码到sl项目中时,关联实体并没有SET方法,只有GET方法,不知道是不是因为这个原因.

    public partial class Personal : INotifyPropertyChanged
    {
        //公司信息
            [External]
            [Association("Company", "CompanyId", "CompanyId", IsForeignKey=true)]
            public Company Company 
            { 
                get
                {
                    return company;
                }
                set
                {
                    company = value;
                    NotifyPropertyChanged("Company");
                }
            }
    
            #region INotifyPropertyChanged Members
    
            public event PropertyChangedEventHandler PropertyChanged;
    
            #endregion
    
            private void NotifyPropertyChanged(string prop)
            {
                if (PropertyChanged != null)
                {
                    PropertyChanged(this, new PropertyChangedEventArgs(prop));
                }
            }
    }
    

    aaaa
    2009年6月16日 8:31
  • 新增数据要通知的话用ObservableCollection看看

    http://msdn.microsoft.com/en-us/library/ms668604(VS.95).aspx
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    2009年6月17日 3:09
    版主
  • 我新建了一个XAML文件,这个文件也是一个列表,也是实体关系,奇怪的是,这里的实体关联,新增时,没有问题.

    但这两个XAML文件的区别就是,前面有问题的那个,实体关联是A关联B,B关联C,这样出来的结果列表.
    而正常的这个是B关联C出来的结果.


    aaaa
    2009年6月18日 3:10
  • 有问题的就比如:(人员表)张三 关联  (公司表)微软公司, (公司表)微软公司 关联 (国家表)中国.
     正常的比如: (公司表)微软公司 关联 (国家表)中国.

    aaaa
    2009年6月18日 3:13
  • 你能够提供一个测试用的demo项目和数据库吗?可以把项目上传到:http://skydrive.live.com/然后再这里贴一下下载链接,方便我们测试。
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    2009年6月18日 3:17
    版主