积极答复者
这个DataGrid为什么在数据绑定之后,只显示出来一行数据?

问题
-
<data:DataGrid Height="103" Margin="29,0,31,65" VerticalAlignment="Bottom" TabIndex="20" x:Name="dgPrmItems" SelectionMode="Extended" AutoGenerateColumns="False" GridLinesVisibility="All" TabNavigation="Cycle" IsReadOnly="True" RowHeight="0"> <data:DataGrid.Background> <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> <GradientStop Color="#FF5399FF" Offset="0"/> <GradientStop Color="#FF6F84B3" Offset="1"/> <GradientStop Color="#FFE9F6FF" Offset="0.254"/> <GradientStop Color="#FFE7F4FF" Offset="0.95099997520446777"/> <GradientStop Color="#FF87B7FD" Offset="0.13400000333786011"/> </LinearGradientBrush> </data:DataGrid.Background> <data:DataGrid.AlternatingRowBackground> <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> <GradientStop Color="#FF000000"/> <GradientStop Color="#FFFFFFFF" Offset="1"/> </LinearGradientBrush> </data:DataGrid.AlternatingRowBackground> <data:DataGrid.Columns> <data:DataGridTextColumn Header="唯一编号" CanUserSort="True" CanUserResize="True" Binding="{Binding id}" Visibility="Collapsed"/> <data:DataGridTextColumn Header="产品类别" CanUserSort="True" CanUserResize="True" Binding="{Binding producttypedes}"/> .... ... </data:DataGrid.Columns> </data:DataGrid>
PrmItem pi = new PrmItem() { id = Guid.NewGuid().ToString(), producttypedes = sc.ProductTypeDes, ... ... }; this.lstPrmItems.Add(pi);<br/><br/> // 在page.xaml.cs类里,有一个private List<PrmItem> lstPrmItems = new List<PrmItem>();<br/> this.dgPrmItems.ItemsSource = this.lstPrmItems;
public class PrmItem { public string id {get;set;} public string producttypedes { get; set; } ... ... }
这几段程序有什么问题吗?
HAL
答案
-
和绑定无关。你的ItemsSource需要Implement INotifyCollectionChanged 。这样你新加入的数据才会立刻显示出来。试试这个:
ObservableCollection<object> observableCollection = new ObservableCollection<object>(); IEnumerator enumerator = lstPrmItems.GetEnumerator(); enumerator.Reset(); while (enumerator.MoveNext()) observableCollection.Add(enumerator.Current); this.dgPrmItems.ItemsSource = observableCollection;
加入数据的时候直接 加到observableCollection里。
SL3 里的PagedCollectionView 是个更好的选择,因为它支持Paging, Sorting, Grouping.
PagedCollectionView view = new PagedCollectionView(lstPrmItems);- 已标记为答案 hal9000plus 2009年4月13日 3:08
全部回复
-
你用VS2008 DEBUG一下看看LIST里有几条数据就知道了
My blog: http://blog.csdn.net/dotfun http://dotfun.cnblogs.com
My contact: QQ:372900288 E-mail:372900288@qq.com msn:sellnet007@hotmail.com
-
和绑定无关。你的ItemsSource需要Implement INotifyCollectionChanged 。这样你新加入的数据才会立刻显示出来。试试这个:
ObservableCollection<object> observableCollection = new ObservableCollection<object>(); IEnumerator enumerator = lstPrmItems.GetEnumerator(); enumerator.Reset(); while (enumerator.MoveNext()) observableCollection.Add(enumerator.Current); this.dgPrmItems.ItemsSource = observableCollection;
加入数据的时候直接 加到observableCollection里。
SL3 里的PagedCollectionView 是个更好的选择,因为它支持Paging, Sorting, Grouping.
PagedCollectionView view = new PagedCollectionView(lstPrmItems);- 已标记为答案 hal9000plus 2009年4月13日 3:08
-
没错,这就是我要找的东西。
现在的代码如下:
public partial class Page : UserControl
{
// 数据集合。做为类成员存在。private ObservableCollection<PrmItem> ocPrmItems =
new ObservableCollection<PrmItem>();
public Page()
{
InitializeComponent();
//一次性指定数据源。
this.dgPrmItems.ItemsSource = this.ocPrmItems;}
private void btAddPrmItem_Click(object sender, RoutedEventArgs e)
{
PrmItem pi = new PrmItem()
{
producttype = sc.ProductType,
...
};this.ocPrmItems.Add(pi);
this.dgPrmItems.ScrollIntoView(pi, dgPrmItems.Columns[0]);
}
}
HAL