为SSIS编写自定义数据流组件之进阶篇:自定义属性的下拉式编辑器
2009-09-19 00:00:00 来源:WEB开发网上面这一篇讲解的是如何通过枚举类型的方式实现简单的下拉列表。很显然的一个问题是,枚举的个数是固定的,而且是有限的。
那么有没有办法让我们的列表更加灵活呢?例如动态生成一个列表。答案是:可以的。这就是本篇文章探讨的问题
我们首先来看一下具体的效果
图片看不清楚?请点击这里查看原图(大图)。
还是我们那个“文件夹数据源”的组件,它的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;
}
}
}
更多精彩
赞助商链接