通过按需加载方式加载 C1DataGrid 及所需的相关 DLL

发布时间:2013/06/26 00:06 发布者:jian

返回博客中心

在发布 Silverlight 应用程序时,为了能够让应用程序在客户端有最佳的初始加载速度,我们会将初始画面中用不到的资源进行按需加载,当发生页面导航操作时,我们会根据新页面的需要加载更多的资源,本文主要演示如何在客户端按需加载 C1DataGrid 所需的资源文件。

实现,我们创建一个名为 C1Datagrid_LoadOnDemand_Silverlight 的 Silverlight 应用程序,以及所对应的 Web 应用程序。

创建完成之后再给解决方法添加一个名为 C1SilverlightControlsLibrary 的 Silverlight 类库项目,我们将 Silverlight 应用程序中需要的控件都添加到该项目中,并在该项目添加一个名为 C1DataGridPagerControl.xaml 的 Silverlight 用户控件。

1、创建 C1SilverlightControlsLibrary 工程

从 Visual Studio 工具箱中将 C1 Silverlight 5.0 分类下的 C1DataGrid 添加到 C1DataGridPagerControl 的 XAML 设计界面。然后,在 C1SilverlightControlsLibrary 项目文件上鼠标右键,选择添加引用菜单,并在出现的对话框中选择 C1.Silverlight.DataGrid.Ria.5,引用添加完成之后在 C1DataGridPagerControl  的 XAML 代码视图中添加 C1DataPager 控件,最终的 XAML 代码如下:

<UserControl x:Class="C1SilverlightControlsLibrary.C1DataGridPagerControl"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    d:DesignHeight="350" d:DesignWidth="400" xmlns:c1="http://schemas.componentone.com/winfx/2006/xaml">
    
    <Grid x:Name="LayoutRoot" Background="White">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>
        <c1:C1DataGrid Margin="10,10,12,0" Name="c1DataGrid1" VerticalAlignment="Top" Height="300" />
        <c1:C1DataPager Source="{Binding ItemsSource, ElementName=c1DataGrid1}" HorizontalAlignment="Right" Name="c1DataPager1" VerticalAlignment="Top" PageSize="10" Grid.Row="1" />
    </Grid>
</UserControl>

 

2、将 C1SilverlightControlsLibrary 和相关 DLL 拷贝到 ClientBin 目录下

编译 C1SilverlightControlsLibrary 工程,并将 编译之后 bin 目录下的以下文件拷贝到 C1Datagrid_LoadOnDemand_Silverlight.Web 项目的 ClientBin 目录中:

1 C1.Silverlight.5.dll
2 C1.Silverlight.DataGrid.5.dll
3 C1.Silverlight.DataGrid.Ria.5.dll
4 C1.Silverlight.DateTimeEditors.5.dll
5 C1.Silverlight.Extended.5.dll
6 System.ComponentModel.DataAnnotations.dll
7 System.Windows.Controls.dll
8 System.Windows.Data.dll
9 C1SilverlightControlsLibrary.dll
10 zh-Hans/C1.Silverlight.5.resources.dll
11 zh-Hans/C1.Silverlight.DataGrid.5.resources.dll
12 zh-Hans/C1.Silverlight.DataGrid.Ria.5.resources.dll
13 zh-Hans/C1.Silverlight.Extended.5.resources.dll

 

3、在 C1Datagrid_LoadOnDemand_Silverlight 中按需加载 C1SilverlightControlsLibrary.dll 和相关DLL。

在 MainPage 后台代码中添加以下代码,以完成按需加载操作:

 

    public partial class MainPage : UserControl
    {
        // 记录需要下载的资源数量
        private int dllLoadCount = 0;
        // 资源下载对象
        private WebClient dllDownloader = new WebClient();
        public MainPage()
        {
            InitializeComponent();
            dllDownloader.OpenReadCompleted +=
                new OpenReadCompletedEventHandler(wc_OpenReadCompleted);
            // 下载主 DLL
            dllDownloader.OpenReadAsync(
                new Uri("C1SilverlightControlsLibrary.dll", UriKind.Relative));
        }
        private void wc_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
        {
            if ((e.Error == null) && (e.Cancelled == false))
            {
                AssemblyPart assemblyPart = new AssemblyPart();
                assemblyPart.Load(e.Result);
                dllLoadCount++;
                switch (dllLoadCount)
                {
                    case 1:
                        dllDownloader.OpenReadAsync(
                            new Uri("C1.Silverlight.5.dll", UriKind.Relative));
                        break;
                    case 2:
                        dllDownloader.OpenReadAsync(
                            new Uri("C1.Silverlight.DataGrid.5.dll", UriKind.Relative));
                        break;
                    case 3:
                        dllDownloader.OpenReadAsync(
                            new Uri("C1.Silverlight.DataGrid.Ria.5.dll", UriKind.Relative));
                        break;
                    case 4:
                        dllDownloader.OpenReadAsync(
                            new Uri("C1.Silverlight.DateTimeEditors.5.dll", UriKind.Relative));
                        break;
                    case 5:
                        dllDownloader.OpenReadAsync(
                            new Uri("C1.Silverlight.Extended.5.dll", UriKind.Relative));
                        break;
                    case 6:
                        dllDownloader.OpenReadAsync(
                            new Uri("zh-Hans/C1.Silverlight.5.resources.dll", UriKind.Relative));
                        break;
                    case 7:
                        dllDownloader.OpenReadAsync(
                            new Uri("zh-Hans/C1.Silverlight.DataGrid.5.resources.dll", UriKind.Relative));
                        break;
                    case 8:
                        dllDownloader.OpenReadAsync(
                            new Uri("zh-Hans/C1.Silverlight.DataGrid.Ria.5.resources.dll", UriKind.Relative));
                        break;
                    case 9:
                        dllDownloader.OpenReadAsync(
                            new Uri("System.Windows.Data.dll", UriKind.Relative));
                        break;
                    case 10:
                        dllDownloader.OpenReadAsync(
                            new Uri("System.ComponentModel.DataAnnotations.dll", UriKind.Relative));
                        break;
                    case 11:
                        dllDownloader.OpenReadAsync(
                            new Uri("System.Windows.Controls.dll", UriKind.Relative));
                        break;
                    case 12:
                        // 所需 DLL 下载完成之后,通过反射创建 C1DataGridPagerControl 实例
                        Control control = Activator.CreateInstance(Type.GetType("C1SilverlightControlsLibrary.C1DataGridPagerControl, C1SilverlightControlsLibrary, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null")) as Control;
                        this.LayoutRoot.Children.Add(control);
                        break;
                    default:
                        break;
                }
            }
        }
    }

 

运行截图:

image

 

源码下载:VS2010 + C1 Studio for Silverlight 2013V1


关于葡萄城

赋能开发者!葡萄城是专业的集开发工具、商业智能解决方案、低代码开发平台于一身的软件和服务提供商,为超过 75% 的全球财富 500 强企业提供服务。葡萄城专注控件软件领域30年,希望通过模块化的开发控件、灵活的低代码应用开发平台等一系列开发工具、解决方案和服务,帮助开发者快速响应复杂多变的业务需求,最大程度地发挥开发者的才智和潜能,让开发者的 IT 人生更从容更美好。

了解详情,请访问葡萄城官网