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

  • 相关阅读:
    微软 软件的 一组堆成快捷键
    C#事件 的讲解
    软件缺陷分析的几种方法
    一个长三角人对深圳的看法 (转)
    一次LoadRunner的CPC考试经历
    测试是一门武功
    ORACLE的性能测试经验总结
    深圳测试协会第九次论坛在深圳举行
    10月28日参加了IBM的产品推介会
    什么是web安全性测试?
  • 原文地址:https://www.cnblogs.com/Dincat/p/13437421.html
Copyright © 2011-2022 走看看