2010-04-25 159 views
0

我有这样一个数据网格:绑定到列表<>

<dg:DataGrid Name="dg" AutoGenerateColumns="False" CanUserDeleteRows="True"> 
        <dg:DataGrid.Columns> 
         <dg:DataGridTextColumn Header="Product Code" x:Name="columnProductCode" Binding="{Binding Path=Product.ProductCode}" IsReadOnly="True" ></dg:DataGridTextColumn> 
         <dg:DataGridTextColumn Header="Product Name" x:Name="columnProductName" Binding="{Binding Path=Product.Name}" IsReadOnly="True" ></dg:DataGridTextColumn> 
         <dg:DataGridTextColumn Header="ProductMeasure" x:Name="columnDonViTinh" Binding="{Binding Path=Product.Measure IsReadOnly="True"></dg:DataGridTextColumn> 
         <dg:DataGridTextColumn Header="Quantity" x:Name="ColumnQuantity" Binding="{Binding Path=Quantity IsReadOnly="False"></dg:DataGridTextColumn> 
        </dg:DataGrid.Columns> 
</dg:DataGrid> 

在后面的代码,我有这样一个结构:

private struct ProductDetail 
     { 

      public TProduct Product { get; set ; } // TProduct is a class provied by a web service 
      public int Quantity { get; set; } 
     } 

和像这样的列表:

 private IList<ProductDetail> bs = new List<ProductDetail>(); 

我曾尝试将数据填充到“bs”。和这样的绑定:

this.dg.ItemsSource = this.bs; 

一切都很好。我可以插入一个新行,删除行,但是当我尝试修改列数量然后单击数据网格的头部(要求) - >数量列更改为之前。

我该如何解决这个问题。 感谢先进。

回答

1

OK,我已经尝试定义一个类(TProduct和数量属性也)而不是目前的结构。和..它的作品=。=

private class ProductDetail 
{ 
    public TProduct Product { get; set ; } // TProduct is a class provied by a web service 
    public int Quantity { get; set; } 
} 
1

我不知道DataGrid的完整API,但我认为在将它们推回到底层对象之前必须提交更改。 Looking at the docs它看起来像编辑没有提交,直到您更改单元格或按回车。如果您在执行这些操作之前进行排序,编辑可能会被取消。

+0

谢谢麦克布朗和布伦特。我尝试“UpdateSourceTrigger = PropertyChanged”,但它不起作用。 – hanuman0503 2010-04-25 15:26:24

4

在您的数据网格上,您必须指定在更改属性时数据发生更改,而不是离开单元。为此,您将UpdateSourceTrigger=PropertyChanged添加到您的绑定中,然后它应该可以工作。你的DataGrid现在这个样子:

<dg:DataGrid Name="dg" AutoGenerateColumns="False" CanUserDeleteRows="True"> 
    <dg:DataGrid.Columns> 
     <dg:DataGridTextColumn Header="Product Code" 
      x:Name="columnProductCode" 
      Binding="{Binding Path=Product.ProductCode, UpdateSourceTrigger=PropertyChanged}" 
      IsReadOnly="True" > 
     </dg:DataGridTextColumn> 
     <dg:DataGridTextColumn Header="Product Name" 
      x:Name="columnProductName" 
      Binding="{Binding Path=Product.Name, UpdateSourceTrigger=PropertyChanged}" 
      IsReadOnly="True" > 
     </dg:DataGridTextColumn> 
     <dg:DataGridTextColumn Header="ProductMeasure" 
      x:Name="columnDonViTinh" 
      Binding="{Binding Path=Product.Measure, UpdateSourceTrigger=PropertyChanged}" 
      IsReadOnly="True"> 
     </dg:DataGridTextColumn> 
     <dg:DataGridTextColumn Header="Quantity" 
      x:Name="ColumnQuantity" 
      Binding="{Binding Path=Quantity, UpdateSourceTrigger=PropertyChanged}" 
      IsReadOnly="False"> 
     </dg:DataGridTextColumn> 
    </dg:DataGrid.Columns> 
</dg:DataGrid> 
+0

谢谢麦克布朗和布伦特。我尝试“UpdateSourceTrigger = PropertyChanged”,但它不起作用。 – hanuman0503 2010-04-25 15:25:45