Я пытаюсь создать панель проводника объектов SQL Server в wpf, используя SMO
(Microsoft.SqlServer.ConnectionInfo.dll, Microsoft.SqlServer.Management.Sdk.Sfc.dll, Microsoft.SqlServer.Smo
)
как это:
- Server 50.80.90.90
- DB1
- Tables
- tbl1
- стол2
- стол3
- Процедуры
- Просмотры
- Функции
- Tables
- DB2
- DB3
- DB1
Это моя попытка:
CS
using Microsoft.SqlServer.Management.Smo;
public partial class SQLPaneDemo : Window
{
public SQLAssigner()
{
InitializeComponent();
//Connect to local sql server instance
Server srv = new Server();
treeView1.ItemsSource = new List<Server> { srv };
}
}
Xaml
<Window x:Class="SQLPaneDemo.SQLPaneDemo"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mdl="clr-namespace:Microsoft.SqlServer.Management.Smo;assembly=Microsoft.SqlServer.Smo"
Title="SQLPaneDemo" Height="300" Width="300">
<DockPanel>
<TreeView x:Name="treeView1"/>
</DockPanel>
<Window.Resources>
<HierarchicalDataTemplate DataType = "{x:Type mdl:Server}" ItemsSource = "{Binding Databases}">
<TextBlock Text="{Binding Name}"/>
</HierarchicalDataTemplate>
<DataTemplate DataType="{x:Type mdl:Database}">
<TreeViewItem x:Name="DBtvItem" Header="{Binding Name}">
<TreeViewItem Header="Tables" ItemsSource="{Binding Tables}"></TreeViewItem>
<TreeViewItem Header="Procedures" ItemsSource="{Binding StoredProcedures}"></TreeViewItem>
<TreeViewItem Header="Views" ItemsSource="{Binding Views}"></TreeViewItem>
<TreeViewItem Header="Triggers" ItemsSource="{Binding Triggers}"></TreeViewItem>
</TreeViewItem>
</DataTemplate>
<DataTemplate DataType="{x:Type mdl:Table}">
<TextBlock Text="{Binding Name}"/>
</DataTemplate>
<DataTemplate DataType="{x:Type mdl:StoredProcedure}">
<TextBlock Text="{Binding Name}"/>
</DataTemplate>
<DataTemplate DataType="{x:Type mdl:Trigger}">
<TextBlock Text="{Binding Name}"/>
</DataTemplate>
<DataTemplate DataType="{x:Type mdl:View}">
<TextBlock Text="{Binding Name}"/>
</DataTemplate>
</Window.Resources>
</Window>
Он выдает исключение при привязке объектов db, поскольку он может иметь значение IsAccessable, равное false, как я могу привязать элемент DBtvItem только тогда, когда Database.IsAccessable == true? есть ли у вас какие-либо идеи/проекты/контроли по этой теме? А это моя демонстрация https://drive.google.com/file/d/0ByBgbqcnNgX_Rk83QUU0T0R4Qnc/view?usp=sharing Заранее спасибо.