Как связать битовое поле SQL с полем со списком True / False или списком? - PullRequest
0 голосов
/ 14 октября 2010

Я храню значения True / False как битовые поля в SQL Server. Поля обнуляются. Каков синтаксис XAML для привязки битового поля к комбинированному окну WPF, чтобы пользователь мог выбрать True / False или пусто (null)?

Кстати, я привязываюсь к строго типизированному набору данных / datatable. Привязка с помощью перетаскивания упрощает привязку к другим типам данных. Я, конечно, не против редактировать XAML, но мне интересно, можно ли сделать так, чтобы перетаскивание работало в этом сценарии?

Ответы [ 2 ]

1 голос
/ 04 июля 2012

Так же, как предложение для всех, кто сталкивался с этой проблемой (без необходимости выполнять XAML), я сделал следующее, используя Linq (VB 2008):

Private Sub BindMyCombo()
    Dim yesNo As String() = {"No", "Yes"}   'Or false, true or nay, yay -whatever

    Dim bits = From bit In yesNo _
               Select New With { _
                   .BitVal = Cbool(Array.IndexOf(yesNo, bit)), _
                   .BitText = bit _
               }

    With Me.myBitComboBox
        'Clear anything in the combo first if necessary...
        .DataSource = Nothing
        .Items.Clear()
        'New binding in case there are more "bits" to be used elsewhere in your form
        .BindingContext = New BindingContext
        .DataSource = bits.ToList
        .DisplayMember = "BitText"
        .ValueMember = "BitVal"
    End With

End Sub

После этого нужно просто выполнить связывание с набором данных. Когда вы это сделаете, укажите это, когда значение бита равно нулю, чтобы задать для выбранной комбинации selectedValue пустое значение или ничего, например ...

With Me.myBitComboBox
    .DataBindings.Clear()
    .DataBindings.Add(New Binding("SelectedValue", myDataSetName, "myBitFieldName", _
                      True, DataSourceUpdateMode.OnPropertyChanged, Nothing))
    .SelectedValue = IIf(mdDataSetName.myBitFieldName.ToString = "", "", _
                         myDataSetName.myBitFieldName)
End With

Надеюсь, это поможет всем, кто сталкивается с этой проблемой (например, я).

0 голосов
/ 15 октября 2010

Скорее всего, вам потребуется создать преобразователь значений (класс, реализующий интерфейс IValueConverter), который может преобразовывать значение битового поля в логическое значение.Частично проблема заключается в том, как представить нулевое значение в виде логического состояния?Обычно это зависит от бизнес-процесса или правил.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...