【问题标题】:How to bind radio button in VB.net and C#?如何在 VB.net 和 C# 中绑定单选按钮?
【发布时间】:2013-05-15 14:09:27
【问题描述】:

我在将表单属性绑定到数据源时遇到问题。解决方法在这里(请看):Radio Buttons And Databinding in vb.net

问题是,我不知道如何按照说明进行操作-“...然后您可以简单地将表单上的 CarpetColor 属性绑定到数据源的 CarpetColor。”你能告诉我怎么做吗?

另外,由于某种原因,我无法使用“INotifyPropertyChanged”接口(智能感知无法检测到)。我必须导入任何命名空间吗?

编辑:

enum Gender { Male,Female }
        public Gender _Gender
        {
            get { 
                if(radMale.Checked == true)
                    return Gender.Male;
               else
                    return Gender.Female;
            }
            set
            {
                if (value == Gender.Male)
                    radMale.Checked = true;
                else
                    radFemale.Checked = true;
            }
        }

这是我的代码的一部分。就我而言,我正在尝试使用 CRUD 方法制作简单的学生信息。我被困在如何绑定单选按钮上,但我发现我可以使用表单的属性来实现它。绑定到任何其他控件(例如文本框和组合框)相当容易。就我而言,我想绑定一个表单属性

【问题讨论】:

  • C# Data Binding, Googled for you。有那么难吗?
  • 我熟悉数据绑定,但无法设法对表单属性进行数据绑定(昨天才知道这可能)。谷歌搜索在我的情况下无效,因为我设法找到了大约两个半小时的解决方案。这里是初学者。
  • 那里提供了大量的示例和演练。作为初学者应该不是问题。您在实施过程中遇到了哪些问题?你遵循什么指南? 你的代码在哪里?
  • @tnw - 更新了我的帖子
  • 我已经进行的研究: 1.) 从两个流行的站点下载了十几个源代码 - 不走运,他们没有使用这种方法。 2.) 阅读两本 VB.net 2008 书籍 - 很糟糕,没有找到与此相关的信息。 3.) 搜索 google 和 dogpile - 很高兴找到我在上面发布的链接,但不知道如何实现它。我可能遗漏了一些其他关键术语。

标签: c# datasource


【解决方案1】:

所以折腾了半天,我终于想出了解决问题的办法。

实际上,我已经在 VB.net 中完成了编码,因为我更熟悉 VB 语法而不是 C#。尽管如此,由于它们受 .NET 框架的限制,因此它们的逻辑非常相似。

form 属性如下(虽然原帖中的枚举也是可能的。):

Public Property propGender() As String
    Get
        If RadioButton1.Checked = True Then
            Return "M"
        Else
            Return "F"
        End If
    End Get
    Set(ByVal value As String)
        _Sex = value
        If _Sex = "M" Then
            RadioButton1.Checked = True
        Else
            RadioButton2.Checked = True
        End If
    End Set
End Property

这是微不足道的,但我只包含该代码 sn-p 以进一步澄清。

关于如何对表单属性进行数据绑定的答案很简单:

Dim genderBinder = New Binding("propGender", Tbl_Stud_InfoBindingSource, "Gender")
Me.DataBindings.Add(genderBinder)
Me.DataBindings.Add(genderBinder)

Gender 是我需要的数据成员。使用单选按钮调整表单属性是我感到困惑的地方(直到现在,老实说)。通过实现INotifyPropertyChanged 接口解决了这个问题。之前以为每个项目都会隐含这个,但是很容易发现应该先导入System.ComponentModel。感谢MSDN

Imports System.ComponentModel

引发 protertyChanged 事件可以通过以下方式完成:

Protected Sub OnPropertyChanged(ByVal name As String)
    RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(name))
End Sub

Private Sub RadioButton1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton1.CheckedChanged
    OnPropertyChanged("propGender")
End Sub

Private Sub RadioButton2_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton2.CheckedChanged
    OnPropertyChanged("propGender")
End Sub

其中 RadioButton1 = 男性单选框和 RadioButton2 = 女性(最好遵循良好的命名约定!)。

我对 C# 语法不太熟悉,但认为提升 checkChanged 属性的等效代码是:

RadioButton1.CheckedChanged += (s, args) => OnPropertyChanged("propGender");
RadioButton2.CheckedChanged += (s, args) => OnPropertyChanged("propGender");

最后,通过这种方式,我现在可以轻松地绑定单选按钮 - 我知道解决这个问题很容易,但像我这样的初学者很常见。在 VB6 中,这可以通过使用流行的记录集轻松实现。在 .NET 中,解决方案并不明显。

编辑: 我在 SO 中看到了与同一场景有关的其他一些问题。我找到了两个,但它们都使用 C#,这对于 VB 用户来说可能是模糊的。

编辑: 我用来弄清楚的缺失的关键术语只是“数据绑定单选按钮”。这就是为什么我想更改这个问题的标题以使其更明确。

【讨论】:

    猜你喜欢
    • 2012-07-09
    • 2021-01-29
    • 2010-10-03
    • 1970-01-01
    • 2017-03-02
    • 1970-01-01
    • 2017-02-12
    • 2011-08-21
    • 1970-01-01
    相关资源
    最近更新 更多