silverlight datagrid列表枚举找控件

silverlight datagrid列表枚举找控件,第1张

概述  最近在用silverlight4做个小项目,遇到些问题.   前台界面有一个DataGrid控件. 大伙应该都知道,DataGrid绑定是不能用匿名类的,所以我那里会是用的泛型结构体.别烦我啰索,也许就有很多人都忘了,这个泛型结构体有时候还是比较好用的,就当是复习了. 泛型结构如下: public struct CP<T, K> { public T Field1 { g


  最近在用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列表枚举找控件所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1064060.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存