我有一个自定义操作,我想传递一个sql服务器名称,它会在下拉列表中填充结果,但是下拉列表中不会包含结果更新
添加了自定义操作
[CustomAction]
public static ActionResult PopulateAvailableDatabases(Session session)
{
const string availableDatabases = "AVAILABLE_DATABASES";
session.Log("inside PopulateAvailableDatabases");
var view = session.Database.OpenView($"DELETE FROM ComboBox WHERE ComboBox.Property='{availableDatabases}'");
view.Execute();
view = session.Database.OpenView($"SELECT * FROM ComboBox WHERE ComboBox.Property='{availableDatabases}'");
view.Execute();
var databases = GetDatabases(session);
int index = 0;
try
{
foreach (var database in databases)
{
session.Log(database);
var record = session.Database.CreateRecord(3);
record.SetString(1, availableDatabases);
record.SetInteger(2, index++);
record.SetString(3, database);
view.Modify(ViewModifyMode.InsertTemporary, record);
}
}
catch (Exception ex)
{
ex.ToString();
session.Log("Exception Details: " + ex.Message);
}
view.Close();
session.Log("Closing view");
view.Close();
return ActionResult.Success;
}
这是在我的对话框中:
<Control Id="FindDatabase" Type="PushButton" X="270" Y="65" Width="56" Height="17" Text="&Find Databases">
<!--<Publish Event="NewDialog" Value="WelcomeDlg">1</Publish>-->
<Publish Event="DoAction" Value="PopulateAvailableDatabases">1</Publish>
<!--<Publish Event="EndDialog" Value="Return">1</Publish>-->
</Control>
以下是下拉列表:
<Control Id="DatabaseNameLabel" Type="Text" X="47" Y="181" Width="100" Height="15" TabSkip="no" Text="&Database:" />
<Control Id="DatabaseNameEdit" Type="ComboBox" X="45" Y="194" Width="220" Height="18" Property="AVAILABLE_DATABASES">
<ComboBox Property="AVAILABLE_DATABASES">
<ListItem Text="[AVAILABLE_DATABASES]" Value="[AVAILABLE_DATABASES]" />
</ComboBox>
<Publish Property="DATABASE_NAME" Value="0">1</Publish>
</Control>
答案 0 :(得分:0)
MSI对话框更新问题解决方法 :要变通解决MSI对话框更新问题(缺少对话框更新事件/使对话框更新事件发生故障),可以在对话框之间跳转以强制更新状态。对话框上的所有控件。请参见下面的Stefan Kruger的变通方法,或使用下一个按钮的click事件,以按照约翰在上面所述的方式在下一个对话框上显示控件。
必须添加为答案,评论时间太长。仅提示。
github.com :看看来自github的这些示例:github.com search。
更新问题 :我记得当您将 DoActions
与按钮事件挂钩时,对话框更新问题存在问题(返回上一个对话框,然后再返回下一个对话框,以查看列表是否包含项)。尝试对话框初始化事件?那是您正在使用的那个吗?
Stefan Kruger的解决方法 :哦,这是Stefan Kruger讲的:http://www.installsite.org/pages/en/msi/articles/MultiListBox/index.htm。我记得他在两个对话框之间跳转来处理更新问题。自从我看了已经有一段时间了。这是基于VBScript的通用概念。
可以运行,以后再检查。玩得开心。