最近在用silverlight4做个小项目,遇到些问题.
前台界面有一个DataGrID控件.
大伙应该都知道,DataGrID绑定是不能用匿名类的,所以我那里会是用的泛型结构体.别烦我啰索,也许就有很多人都忘了,这个泛型结构体有时候还是比较好用的,就当是复习了.
泛型结构如下:
public struct CP<T,K> { public T FIEld1 { get; set; } public K FIEld2 { get; set; } }
界面代码:
<sdk:DataGrID name="dgStock" IsReadonly="True" autoGenerateColumns="False" HorizontalContentAlignment="Center" GrIDlinesVisibility="All"> <sdk:DataGrID.Columns> <sdk:DataGrIDTextColumn header="货物名称" MinWIDth="50" Binding="{Binding FIEld2}"></sdk:DataGrIDTextColumn> <sdk:DataGrIDTextColumn header="单位名称" MinWIDth="50" Binding="{Binding FIEld4}"></sdk:DataGrIDTextColumn> <sdk:DataGrIDTextColumn header="规格" MinWIDth="50" Binding="{Binding FIEld5}"></sdk:DataGrIDTextColumn> <sdk:DataGrIDTextColumn header="数量" MinWIDth="50" Binding="{Binding FIEld3}"></sdk:DataGrIDTextColumn> <sdk:DataGrIDTextColumn header="入库时间" MinWIDth="50" Binding="{Binding FIEld6,StringFormat=yyyy-MM-dd}"></sdk:DataGrIDTextColumn> <sdk:DataGrIDTextColumn header="大仓库" MinWIDth="50" Binding="{Binding FIEld7}"></sdk:DataGrIDTextColumn> <sdk:DataGrIDTextColumn header="存放仓库" MinWIDth="50" Binding="{Binding FIEld7}"></sdk:DataGrIDTextColumn> <sdk:DataGrIDTextColumn header="存放仓位" MinWIDth="50" Binding="{Binding FIEld8}"></sdk:DataGrIDTextColumn> <sdk:DataGrIDTemplateColumn header=" *** 作" MinWIDth="50"> <sdk:DataGrIDTemplateColumn.CellTemplate> <DataTemplate> <StackPanel OrIEntation="Horizontal"> <sdk:Label Content="数量:" margin="5 0 0 0"></sdk:Label> <TextBox name="txtCount" WIDth="50" Height="22"></TextBox> <ComboBox name="ddlBigdepot" WIDth="80" Height="22" ItemsSource="{Binding FIEld9}" SelectionChanged="ddlBigdepot_SelectionChanged"> <ComboBox.ItemTemplate> <DataTemplate> <TextBlock WIDth="85" Text="{Binding FIEld2}" Tag="{Binding FIEld1}"></TextBlock> </DataTemplate> </ComboBox.ItemTemplate> </ComboBox> <ComboBox name="ddlStorage" WIDth="85" Height="22" SelectionChanged="ddlStorage_SelectionChanged"></ComboBox> <ComboBox name="ddlFreightSpace" WIDth="85" Height="22"></ComboBox> </StackPanel> </DataTemplate> </sdk:DataGrIDTemplateColumn.CellTemplate> </sdk:DataGrIDTemplateColumn> </sdk:DataGrID.Columns> </sdk:DataGrID>因为这个DataGrID不需要分页,所以后台代码中,获取到数据源以后就直接绑定了.数据源就是一个List集合;
绑定数据源也就一句代码:
this.dgStock.ItemsSource = e.Result;结果运行起来数据也能正常显示.但是后面就遇到问题了.我要取到列表中每一行的第九列中的控件和值.
取值代码如下:
foreach (object obj in this.dgStock.ItemsSource){ FrameworkElement frameElement = dgStock.Columns[8].GetCellContent(obj); if (frameElement != null) { //取值代码; }}但是调试了好几遍,那个frameElement就是一直为null,一直取不到值,纳闷了很多,也试了很多次.还是不知道为什么...网上查也没查到过这样的问题.
翻开以前写的其他页面的代码,可是其他列表中又可以获取到值啊,界面是一样的绑定方式,后台取值的代码也是一样.觉得很奇怪,后来注意到之前的列表都是带分页的,绑定的时候就用到了一个类:PagedCollectionVIEw
查了下msdn,很简单的说明了一下:表示用于分组、排序、筛选和导航分页数据集合的视图.后面的备注写的稍清楚点:
使用 PagedCollectionVIEw 可为实现 IEnumerable 接口的任何集合提供分组、排序、筛选和分页功能。 DataPager 控件提供一个方便的用户界面,用于使用PagedCollectionVIEw 控制分页。
可以将集合视图视为位于绑定源集合之上的一个层,您可以通过它使用排序、筛选和分组查询来导航和显示集合,所有这些 *** 作都无需 *** 作基础源集合本身。
看到有这个类了后,就试了一下.在用代码给列表作数据源绑定时,用上这个类.其实也就是多了一句代码,只是这样意义就完全不同了PagedCollectionVIEw transferSource = new PagedCollectionVIEw(e.Result);this.dgStock.ItemsSource = transferSource;这样绑定了后再一试,OK,能够找到相应的控件了... 不过现在也只是知其然而不知其所以然... 还是没明白为什么.只是知道如果要对列表的行进行枚举,就必须要将数据源经过这个类的转换,再绑定才可以... 好了.. 继续求学中....... 总结
以上是内存溢出为你收集整理的silverlight datagrid列表枚举找控件全部内容,希望文章能够帮你解决silverlight datagrid列表枚举找控件所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)