文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>Datagrid动态绑定的数据作为图片列添加

Datagrid动态绑定的数据作为图片列添加

时间:2011-04-12  来源:草木mr

用RIA从数据库中获取一整个实体的数据后,首先我要选择Entities中的部分列添加到DataGrid中,但是又不想使用那种拖控件的方式,想方设法改数据源啊用Linq选择Entities的部分数据啊,都不管用,其实很简单,把DataGrid的AutoGenerateColumns设为False,然后在添加列的时候对新建的DataGridTextColumn中的Binding设为那个实体属性的字段名就可以了。。路径它可以自己找到撒~

可是,变态的Silverlight只提供了两种通用的列和一个模板,DataGridTextColumn、DataGridCheckBoxColumn、DataGridTemplateColumn,而模板DataGridTemplateColumn的使用很多时候都是在Xaml中进行的,它下面的子元素DataTemplate没法直接在代码中使用,除非你使用资源。

那好吧,我就使用资源。

用资源有两种方法,可以使用StringBuilder在代码中创建一个资源,然后用XamlReader读取出来,最后DataGridTemplateColumn 的CellTemplate 赋值为XamlReader.Load(sbIcon.ToString()) as DataTemplate,其实相当纠结,因为一个字符写错了就会报错,比如:(代码用的别人的,我写的已经被我注释后删了)

DataGridTemplateColumn colIcon = new DataGridTemplateColumn();
            StringBuilder sbIcon = new StringBuilder();
            sbIcon.Append("<DataTemplate ");
            sbIcon.Append("xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' ");
            sbIcon.Append("xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml' ");
            sbIcon.Append("xmlns:local='clr-namespace:CleverSoft.UI.SLControls;assembly=CleverSoft.UI.SLControls' ");
            sbIcon.Append(">");
            sbIcon.Append("<Grid>");
            sbIcon.Append("<Grid.Resources>");
            sbIcon.Append("<local:MessageInfoIconConverter x:Key='MessageInfoIconConverter' />");
            sbIcon.Append("</Grid.Resources>");  
            sbIcon.Append("<Image Width='16' Height='16' Source='{Binding Icon, Converter={StaticResource MessageInfoIconConverter}}'/>");
            sbIcon.Append("</Grid>");
            sbIcon.Append("</DataTemplate>");
            colIcon.CellTemplate = XamlReader.Load(sbIcon.ToString()) as DataTemplate;

当然,这个里面有个图片路径的转换函数,在下面的方法中也通用。我还是直接说第二种办法吧。

在资源字典中添加下面代码(当然也可以直接在xaml中添加Resource,我只是把为了逻辑清晰些把他们分离出来了)

    <Customs:TypeIconConverter x:Key="TypeIconConverter"/>
   
    <DataTemplate x:Key="DataGridImageColumn">
        <!--<TextBlock Text="{Binding Path=Type}"></TextBlock>-->
        <Image Width="28" Height="28" Source="{Binding Path=Type, Converter={StaticResource TypeIconConverter}}">
            <ToolTipService.ToolTip>
                <TextBlock Text="{Binding Path=Type}"/>
            </ToolTipService.ToolTip>
        </Image>
    </DataTemplate>

然后调用的时候就一句话(可是这句话我测试了好久才没有问题啊!!!)

DataGridTemplateColumn dgTpColumn=new DataGridTemplateColumn();
dgTpColumn.CellTemplate = (DataTemplate)Application.Current.Resources["DataGridImageColumn"];

如果是当前xaml中的资源,直接用 (DataTemplate)Resources["DataGridImageColumn"]就可以了。

嗯,大功告成。

PS:其实吧,我还给那个图片添加了一个提示的~~~


相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载