DAL Generator:如何获得Grid Checkbox?

时间:2013-12-27 16:21:42

标签: wpf vb.net checkbox datagrid data-access-layer

我正在建立一个WPF D.A.L.发生器。

在我的主页面中,我有一个DataGrid,其中填充了数据库中的表列表。

我还有一个名为ShouldInclude?的额外复选框列。我打算用它来确定表格是否应该包含在生成中...如果选中则为yes,如果未选中则为no。

因为我使用强类型列表中的一些基本信息ItemSource填充DataGrid的TableName, Schema, Columns,所以我现在发现自己不知道如何获得checked值我可以决定是否包含它。

以下是构建我的表类型类代码文件的函数:

Private Sub GenerateTyping(ByVal _DG As DataGrid)
    For Each i As TableTyping In _DG.Items
        'check if should be generated

        Dim _TString As String = String.Empty
        Using _sr As New StreamReader(Common.GetPath() & "Class Templates\CSharp\Typing\XXX_Typing.txt")
            _TString = _sr.ReadToEnd()
            _sr.Close()
        End Using
        Dim _FN As String = i.Name & "_Typing.cs"
        Dim _Props As New StringBuilder()
        Dim _CL As List(Of ColumnTyping) = i.Columns
        For Each col In _CL
            With _Props
                Dim _PropStr As String = "public " & Common.GetClrType(col.Type) & " " & col.Name & " { get; set; }"
                .AppendLine("       " & _PropStr)
            End With
        Next
        'Write the new class files
        _TString = _TString.Replace("##TABLENAME##", If(i.Schema.Length > 0, i.Schema & "_", "") & i.Name).Replace("##THE_PROPERTIES##", _Props.ToString())
        If Not Directory.Exists(FilePath & "\Typing\") Then
            Directory.CreateDirectory(FilePath & "\Typing\")
        End If
        Using _sw As New StreamWriter(FilePath & "\Typing\" & If(i.Schema.Length > 0, i.Schema & "_", "") & i.Name & "_Typing.cs", False)
            _sw.Write(_TString)
            _sw.Close()
        End Using
        _TString = String.Empty
        _Props.Clear()

    Next
End Sub

Partial Public Class TableTyping
    Public Property ID As Integer
    Public Property Name As String
    Public Property Schema As String
    Public Property Columns As List(Of ColumnTyping)
End Class

Partial Public Class ColumnTyping
    Public Property ID As Integer
    Public Property Name As String
    Public Property Type As SqlDataType
    Public Property Length As Integer
    Public Property DefaultValue As String
    Public Property Precision As Integer
    Public Property Scale As Integer
End Class

我的数据网格只包含3列。 Include?, Table Schema, Table Name,通过以下方式填充:

<DataGrid EnableRowVirtualization="True" Name="dgTables" IsReadOnly="True" AutoGenerateColumns="False" FontFamily="Calibri" FontSize="14" IsEnabled="False">
    <DataGrid.Columns>
        <DataGridTemplateColumn Header="Include?">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <CheckBox Tag="{Binding ID}" HorizontalAlignment="Center" VerticalAlignment="Center" IsChecked="True" Name="ckTblInclude" />
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
        <DataGridTextColumn Binding="{Binding Schema}" Header="Schema"/>
        <DataGridTextColumn Binding="{Binding Name}" Header="Name"/>
    </DataGrid.Columns>
</DataGrid>

_tg.ItemsSource = _Table

Private Sub GrabTables()
    Dim _Db As Database = Srv.Databases(DBName)
    Dim _Tbls As TableCollection = _Db.Tables
    Dim _tct As Integer = _Tbls.Count
    Dim _i As Integer = 0
    For i = 0 To _tct - 1
        If Not _Tbls(i).IsSystemObject Then
            _i += 1
            _Tables.Add(New TableTyping() With {
                        .ID = _i,
                        .Name = _Tbls(i).Name,
                        .Schema = _Tbls(i).Schema,
                        .Columns = ProcessColumns(_Tbls(i).Columns)})

        End If
    Next
    _TCount = _Tables.Count
End Sub

_TablesList(of TableTyping)

如何在Include?程序中进行GenerateTyping检查?

1 个答案:

答案 0 :(得分:0)

我必须将我的复选框模板更改为以下内容:

<CheckBox Tag="{Binding ID}" HorizontalAlignment="Center" VerticalAlignment="Center" IsChecked="{Binding Include, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Name="ckTblInclude" />

并更改_Tables列表以填充:

Private Sub GrabTables()
    Dim _Db As Database = Srv.Databases(DBName)
    Dim _Tbls As TableCollection = _Db.Tables
    Dim _tct As Integer = _Tbls.Count
    Dim _i As Integer = 0
    For i = 0 To _tct - 1
        If Not _Tbls(i).IsSystemObject Then
            _i += 1
            _Tables.Add(New TableTyping() With {
                        .ID = _i,
                        .Name = _Tbls(i).Name,
                        .Schema = _Tbls(i).Schema,
                        .Columns = ProcessColumns(_Tbls(i).Columns),
                        .Include = True})

        End If
    Next
    _TCount = _Tables.Count
End Sub
相关问题