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

  • 相关阅读:
    由sqlite3入门数据库学习
    Python"八荣八耻"
    Mysql数据导出-Ubuntu
    python-open-cv 自动人脸识别安装包
    Pymysql mysqllient 那些问题!
    MySQL查询(未完结)
    Scarpy+selenium 结合使用
    Scrapy框架的使用 -- 自动跳转链接并请求
    Scrapy框架的使用
    MySQL基础
  • 原文地址:https://www.cnblogs.com/Dincat/p/13437421.html
Copyright © 2011-2022 走看看