2012-05-02 43 views
5

enter image description here连接UI.Dialog对C#安装项目

我添加Microsoft.Data.ConnectionUI.Dialog.dll和Microsoft.Data.ConnectionUI.dll dll文件到我的项目,并使用此代码:

Microsoft.Data.ConnectionUI.DataConnectionDialog dcd = new Microsoft.Data.ConnectionUI.DataConnectionDialog(); 

     Microsoft.Data.ConnectionUI.DataSource.AddStandardDataSources(dcd); 

     if (Microsoft.Data.ConnectionUI.DataConnectionDialog.Show(dcd) == System.Windows.Forms.DialogResult.OK) 
     { 
      // 
     } 
     else 
     { 
      // 
     } 

当我在正常的Windows应用程序中使用它时,一切似乎都没问题(显示标准VS数据连接对话框和高级按钮)。当我在SETUP PROJECT中使用它时,它仅显示高级对话框并且OK按钮被禁用。用户可以测试连接但不能按OK按钮。

有谁知道为什么这不起作用?

+0

您是否尝试过使用管理员权限运行安装项目?如果你从VS内部运行,关闭VS并以管理员身份启动它。 – Jethro

+0

VS作为管理员运行,我刚刚尝试重新设置为管理员,并没有区别:( –

+0

您正在使用哪个版本的ConnectionUI.dll程序集,并且您是从您的设置和Windows项目引用相同的程序集? – Phil

回答

2

根据设置启用/禁用按钮。

本文内容:http://erikej.blogspot.com.au/2010/04/using-adonet-data-connection-dialog-in.html作者“硬编码”数据源,并相应地禁用“更改”按钮。

设置数据源名称时,应启用确定按钮。我挖出了Data Connection Dialog Source Code代码向您展示: http://archive.msdn.microsoft.com/Connection/Release/ProjectReleases.aspx?ReleaseId=3863

在Micrsost.Data.ConnectionUI.Dialog项目中,打开DataConnectionDialog.cs类,你可以看到这是一个事件:

private void ConfigureAcceptButton(object sender, EventArgs e) 
{ 
try 
{ 
acceptButton.Enabled = (ConnectionProperties != null) ? ConnectionProperties.IsComplete : false; 
} 
catch 
{ 
acceptButton.Enabled = true; 
} 
} 

的上述事件从ConnectionProperties中方法迷上了,每次调用该PropertyChange事件触发:

properties.PropertyChanged += new EventHandler(ConfigureAcceptButton); 

为了得到确定按钮启用,您将需要满足ConnectionProperties.IsCom完整的条件。

1

当我从PowerPoint插件运行DataConnectionDialog时,遇到了同样的问题。

问题是SqlConnectionUIControl必须在STA线程中运行。 这是我工作的代码。

加载按钮被点击,启动线程中的数据连接器。

private void dataSourceSelectionButton_Click(object sender, EventArgs e) 
{ 
    Thread browseThread = new Thread(promptForConnectionString); 
    browseThread.TrySetApartmentState(ApartmentState.STA); 
    browseThread.Start(); 
} 

打开对话框。

public string ConnectionString { get; set; } 

private void promptForDataConnection() 
{ 
    DataConnectionDialog dataConnection = new DataConnectionDialog(); 
    DataConnectionConfiguration connectionConfiguration = new DataConnectionConfiguration(null); 
    connectionConfiguration.LoadConfiguration(dataConnection); 

    if (DataConnectionDialog.Show(dataConnection) == DialogResult.OK) 
    { 
    connectionConfiguration.SaveConfiguration(dataConnection); 

    this.ConnectionString = dataConnection.ConnectionString; 
    } 
} 

如果这没有帮助,拿起DataConnectionDialog Source可能。

0

我无法通过以管理员身份运行VS2008来解决此问题。我通过在Winform项目中禁用“启用Visual Studio托管进程”选项来解决此问题。