zoukankan      html  css  js  c++  java
  • 亲子组合框

    介绍 亲子组合盒是大

      

    多数项目中的经典问题之一。这个问题的一个简要概述是: 有两种组合。其中一个是父组合,另一个是子组合。在父组合被触发之后(所选值被更改),子组合应该使用父组合的所选值来填充它的数据源。 例如,下面有三个组合:国家、城市和地区。选择国家组合后,其他的应该被填满。 一般来说,这个困难可以通过编写一个程序来解决组合框的选择值事件。但是,如果表单有4或5个组合,比如国家、城市、地区、街道号和公寓号,这可能会导致意大利面条代码。 一个基本的用户控件(这也是本文的主题)可以为编码器提供最好的解决方案。这种用户控件的两个重要属性是Query和ComboFired。 关于代码 填充数据源的用户控件的查询可以接受一个带有'@'字符的参数。如下图所示: 隐藏,复制Code

    Select city_id as DEGER, city_name as ETIKET from cities where country_id=@

    不需要为窗体编写任何代码行或选择值事件。在表单加载事件中只会编写代码,如下所示: 这两个关键属性是Query、ComboFired,关键过程是针对所选值更改事件的。 隐藏,收缩,复制Code

    Public Property Query() As String
        Get
            Return m_Query
        End Get
        Set(ByVal Value As String)
            m_Query = Value
            If Me.DesignMode Then ' checks if it is in design mode
                Exit Property
            End If
            If m_Query.IndexOf("@") <> -1 Then
            ' finds if the query consists any parameters
                Exit Property
            End If
            If m_Query <> "" Then
                datacontrol = False ' locks the firing selected value change event
                dtCombo.Rows.Clear()
                dtCombo = SQLData.dondur_datatable(m_Query) ' fills th datasource
                ComboBox1.DataSource = dtCombo
                ComboBox1.ValueMember = "DEGER"
                ComboBox1.DisplayMember = "ETIKET"
                datacontrol = True ' unlocks the firing selected value change event
                Dim sender As Object
                Dim e As System.EventArgs
                SV(sender, e) ' after the combo is filled, fires the selected value event
            End If
        End Set
    End Property
    
    Public Property ComboFired() As String
        Get
            Return m_ComboFired
        End Get
        Set(ByVal Value As String)
            m_ComboFired = Value
            If Me.DesignMode Then
                Exit Property
            End If
            If m_ComboFired <> "" Then
            ' adds the selected value event
                AddHandler ComboBox1.SelectedValueChanged, AddressOf SV
            End If
        End Set
    End Property
    
    Protected Sub SV(ByVal sender As Object, ByVal e As System.EventArgs)
        If Not Form1_init Then
            Exit Sub
        End If
        If ComboBox1.SelectedIndex <> -1 Then
            Dim nextCombo As New UCCombo
            nextCombo = findThecombo(m_ComboFired) ' finds the child combo
            If nextCombo Is Nothing Then
                Exit Sub
            End If
            If (nextCombo.Query Is Nothing) Then
                Exit Sub
            End If
            If (nextCombo.Query.IndexOf("=") = -1) Then
            ' checks for parameters
                Exit Sub
            End If
            Dim real_str() As String
            real_str = Split(nextCombo.Query, "=") 
            If Not datacontrol Then
                Exit Sub
            End If
            ' creates the new query
            nextCombo.Query = real_str(0) & "=" & CStr(ComboBox1.SelectedValue)
        End If
    End Sub

    本文转载于:http://www.diyabc.com/frontweb/news282.html

  • 相关阅读:
    Java实现 蓝桥杯 算法训练 画图(暴力)
    Java实现 蓝桥杯 算法训练 画图(暴力)
    Java实现 蓝桥杯 算法训练 相邻数对(暴力)
    Java实现 蓝桥杯 算法训练 相邻数对(暴力)
    Java实现 蓝桥杯 算法训练 相邻数对(暴力)
    Java实现 蓝桥杯 算法训练 Cowboys
    Java实现 蓝桥杯 算法训练 Cowboys
    55. Jump Game
    54. Spiral Matrix
    50. Pow(x, n)
  • 原文地址:https://www.cnblogs.com/Dincat/p/13437421.html
Copyright © 2011-2022 走看看