代码之家  ›  专栏  ›  技术社区  ›  DeveloperDan Asaf

如何将SQL位字段绑定到“真/假”组合框或列表框?

  •  0
  • DeveloperDan Asaf  · 技术社区  · 14 年前

    我在SQL Server中将真/假值存储为位字段。字段可以为空。 将位字段绑定到WPF组合框以便用户可以选择真/假或空(空)的XAML语法是什么?

    顺便说一下,我正在绑定到一个强类型的数据集/数据表。拖放绑定简化了对其他数据类型的绑定。我当然不介意编辑XAML,但我想知道是否可以在这种情况下进行拖放操作?

    2 回复  |  直到 12 年前
        1
  •  0
  •   Hugo    14 年前

    您可能需要创建一个值转换器(实现 IValueConverter 接口)可以将位字段的值转换为布尔值。问题的一部分是,开箱即用,那就是如何将空值表示为布尔状态?这通常取决于业务流程或规则。

        2
  •  1
  •   scrawny    12 年前

    正如对遇到此问题的其他人(不必执行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
    

    在那之后,只需对数据集进行绑定。执行此操作时,请指定当位值为空时,将Combos 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
    

    我希望这能帮助其他遇到这个问题的人(像我一样)。