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


    用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">
    <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:其实吧,我还给那个图片添加了一个提示的~~~

    
  • 相关阅读:
    .NET 客户端上传本地excel文件到服务器上,并在客户端显示
    C#实现数字字符串左补齐0的3种方法
    C# 输出pdf文件流在页面上显示
    ASP.NET 将数据生成PDF (二)
    asp.net生成PDF文件 (1)
    stl常用的查找算法
    stl中的transform()注意其与for_each的不同点(有无返回值)
    stl中的for_each() 函数的注意事项
    如何在VMware系统中的ubuntu16.04中建立与win7系统的共享文件夹
    关于linux中用vi新建立一个.c文件无法保存,显示E212错误的时候
  • 原文地址:https://www.cnblogs.com/mr0512/p/2014118.html
Copyright © 2020-2023  润新知