C#通过自定义UI设置SSIS自定义数据流组件的自定义属性

时间:2012-11-28 16:29:25

标签: c# ssis dataflowtask

我在尝试设置我通过自定义表单创建的数据流组件的自定义属性时遇到了实际问题。

我正在分配的值刚刚设置,自定义属性保持原始值或保持为空。

在我的TaskClass中,我重写了ProvideComponentProperties()方法,并创建了自定义属性,如下所示。

IDTSCustomProperty100 componentCustomProperty = ComponentMetaData.CustomPropertyCollection.New();
componentCustomProperty.Name = "PAFProvider";
componentCustomProperty.Description = "PAF Provider";
componentCustomProperty.Value = "testinitial";

我创建了一个继承自IDtsComponentUI接口的TaskClassUI。我实现了所有必需的方法。

我的初始化方法。

public void Initialize(IDTSComponentMetaData100 dtsComponentMetadata, IServiceProvider serviceProvider)
{
       this._dtsComponentMetaData = dtsComponentMetadata;
            this._serviceprovider = serviceProvider;

}

我的编辑方法的实现

 public bool Edit(IWin32Window parentWindow, Variables variables, Connections connections)
    {
        bool flag;
        try
        {
            PAFUIMainWnd ui = new PAFUIMainWnd(this._dtsComponentMetaData, this._serviceprovider, connections);
            DialogResult result = ui.ShowDialog(parentWindow);
            bool flag1 = result != DialogResult.OK;
            if(!flag1)
            {
                flag = true;
                return flag;
            }
        }
        catch(Exception exe)
        {
            MessageBox.Show(exe.ToString());
        }
        flag = false;
        return flag;            
    }

我的UIFORM的实现。

public PAFUIMainWnd(IDTSComponentMetaData100 iDTSComponentMetaData100, IServiceProvider serviceProvider, Connections connections)
        {            
            this.components = null;
            this.InitializeComponent();
            this._dtsComponentMetaData = iDTSComponentMetaData100;     
            this._designTimeComponent = this._dtsComponentMetaData.Instantiate();
            textBox1.Text = _dtsComponentMetaData.CustomPropertyCollection["PAFProvider"].Value.ToString();

        }

出于测试目的,我在表单上粘贴了一个文本框和一个按钮。即使按钮的OnClick也在下面。我只是从文本框中获取值并将其分配给自定义属性,但它没有分配它。我可以从我分配给文本框的自定义属性中读取原始值。我只是不明白为什么我不能分配它。我完全遵循了MSDN和其他各种例子。如果有人能指出我做错了什么,我会非常感激。它已经进入了头部撞击阶段。

 private void btnOK_Click(object sender, EventArgs e)
    {
       _designTimeComponent.SetComponentProperty("PAFProvider", textBox1.Text);           

        this.Close();
    }

1 个答案:

答案 0 :(得分:0)

重启修复此问题。代码非常好。