WEB开发网
开发学院数据库MSSQL Server 为SSIS编写自定义数据流组件之进阶篇:自定义属性的... 阅读

为SSIS编写自定义数据流组件之进阶篇:自定义属性的下拉式编辑器

 2009-09-19 00:00:00 来源:WEB开发网   
核心提示:上面这一篇讲解的是如何通过枚举类型的方式实现简单的下拉列表,很显然的一个问题是,为SSIS编写自定义数据流组件之进阶篇:自定义属性的下拉式编辑器,枚举的个数是固定的,而且是有限的,以供选择,这当然会更加好一些,那么有没有办法让我们的列表更加灵活呢?例如动态生成一个列表,答案是:可以的

上面这一篇讲解的是如何通过枚举类型的方式实现简单的下拉列表。很显然的一个问题是,枚举的个数是固定的,而且是有限的。

那么有没有办法让我们的列表更加灵活呢?例如动态生成一个列表。答案是:可以的。这就是本篇文章探讨的问题

我们首先来看一下具体的效果

为SSIS编写自定义数据流组件之进阶篇:自定义属性的下拉式编辑器

图片看不清楚?请点击这里查看原图(大图)。

还是我们那个“文件夹数据源”的组件,它的Folder属性,现在点击下拉框之后,能够自动地枚举出来C盘下面的所有子目录,以供选择。这当然会更加好一些。

下面来看看我们是怎么实现的

1. 创建一个单独的UITypeEditor

  public class MyTypeUIDropDownEditor : System.Drawing.Design.UITypeEditor {
 
    IWindowsFormsEditorService editorService = null;
 
    public override object EditValue(System.ComponentModel.ITypeDescriptorContext context, 
      IServiceProvider provider, object value)
    {
      if (context != null && context.Instance != null && provider != null)
      {
        editorService = (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));
        if (editorService != null)
        {
          string current = "没有选择文件夹";
          if (value != null)//这个value其实就是当前用户已经选择好的值
            current = value.ToString();
          MyTypeUIDropDownControl ctrl = new MyTypeUIDropDownControl(current);
 
          ctrl.ValueChanged += new MyTypeUIDropDownControl.ValueChangedHander(ctrl_ValueChanged);
          //添加这个事件的目的是在值发生变化的时候,自动把列表关闭掉
          //这是一个自定义事件
 
 
          editorService.DropDownControl(ctrl);

          value = ctrl.Folder;
          return value;
        }
      }
      return value;
    }
 
    void ctrl_ValueChanged()
    {
      editorService.CloseDropDown();
    }
 
    public override UITypeEditorEditStyle GetEditStyle(
      System.ComponentModel.ITypeDescriptorContext context)
    {
      return UITypeEditorEditStyle.DropDown;
    }
 
    public override bool IsDropDownResizable
    {
      get
      {
        return true;
      }
    }
 

  }

1 2 3  下一页

Tags:SSIS 编写 定义

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接