【问题标题】:filtering the second combobox based on index on the first combobox根据第一个组合框上的索引过滤第二个组合框
【发布时间】:2013-04-04 07:35:56
【问题描述】:
   Public Sub FiltercmbSubCategory()
    Dim sqlconn As New SqlClient.SqlConnection
    sqlconn.ConnectionString = "server = SKPI-APPS1;" & _
    "Database = EOEMS;integrated security=true"

    Dim sqlcommand As SqlCommand

    sqlconn.Open()
    Dim da As New SqlDataAdapter("SELECT * FROM tblOfficeEquipmentSubCategory WHERE SUBCAT_ID = '" & cmbCategory.Text & "'", sqlconn)
    Dim dt As New DataTable
    da.Fill(dt)
    cmbCategory.DataSource = dt
    cmbCategory.DisplayMember = "SUBCAT_Name"
    cmbCategory.ValueMember = "SUBCAT_ID"
    sqlconn.Close()
End Sub

当我将此代码放在表单加载事件上时,第一个组合框上的数据消失 当我将此代码放在第一个组合框的 index_changed 上时

但是当我评论这段代码时,它会再次在组合框 1 中显示记录

我需要根据 CATEGORY_COMBOBOX 过滤 SUB_CATEGORY_COMBO_BOX

【问题讨论】:

  • 你只是想在组合框中显示它不是吗?
  • 你有两个下拉菜单还是一个?
  • @KenClark 它有两个下拉组合框
  • @Never_Mind 我已经知道如何填充类别组合下拉框...所以当我选择 COM 时,它将在子类别组合下拉框中显示相应的子类别

标签: sql vb.net winforms combobox


【解决方案1】:

在里面绑定你的第一个组合框:

if (!Page.IsPostBack)
{
  //  Bind combobox1 code here;
}

现在,在 selectedindexchange 上调用绑定子类别组合的代码。

另外,再看看你的代码:

Dim da As New SqlDataAdapter("SELECT * FROM tblOfficeEquipmentSubCategory WHERE SUBCAT_ID = '" & cmbCategory.Text & "'", sqlconn)
Dim dt As New DataTable
da.Fill(dt)
cmbCategory.DataSource = dt
cmbCategory.DisplayMember = "SUBCAT_Name"
cmbCategory.ValueMember = "SUBCAT_ID"

在此代码中,您将 cmbCategory.Text 作为绑定相同下拉列表 cmbCategory 的参数传递。我认为您在这里错过了第二个下拉菜单。可能是我不正确,但似乎是这样。

【讨论】:

  • 是吗?据我了解我的 select 和 where sql 语法,它将显示 Subcategory 表中的数据,其中 subcatid 等于关键类别组合框。我现在很困惑
  • 看看您将 cmbCategory.Text 作为参数传递给您的选择代码,对吗?在此之下,您将再次绑定相同的下拉列表,即 cmbCategory 但在我看来,它应该是子类别下拉列表..
  • 另一个主要的事情是你应该将你的第一个下拉列表绑定到 if (!Page.IsPostBack) 块中以不丢失当前值。
  • 我明白了!你的权利我的数据源仍然是 cmbCategory 我一开始没有注意到它..我不知道绑定组合框.. 先生有什么建议吗?它的 cmbCategory.text
  • 请将您的页面加载代码粘贴到您要绑定第一个下拉列表的位置,然后粘贴第二个下拉列表的名称。使用此信息更新您的答案。
【解决方案2】:

subcat_id 是字符串还是整数?如果它的整数在你的 where 子句中去掉单引号。

对我来说,您似乎正在用数据填充您选择的相同组合框,而不是子框?

    cmbCategory[SUB?].DataSource = dt

【讨论】:

    【解决方案3】:

    您基于 CATEGORY_COMBOBOX 为两个 SUB_CATEGORY_COMBO_BOX 使用了相同的对象 cmbCategory

    您应该对 SUB_CATEGORY_COMBO_BOX 使用 cmbSubCategory,对 CATEGORY_COMBOBOX 使用 cmbCategory

     Public Sub FiltercmbSubCategory()
                Dim sqlconn As New SqlClient.SqlConnection
                sqlconn.ConnectionString = "server = SKPI-APPS1;" & _
                "Database = EOEMS;integrated security=true"
    
                Dim sqlcommand As SqlCommand
    
                sqlconn.Open()
                Dim da As New SqlDataAdapter("SELECT * FROM tblOfficeEquipmentSubCategory WHERE SUBCAT_ID = '" & cmbCategory.Text & "'", sqlconn)
                Dim dt As New DataTable
                da.Fill(dt)
                cmbSubCategory.DataSource = dt
                cmbSubCategory.DisplayMember = "SUBCAT_Name"
                cmbSubCategory.ValueMember = "SUBCAT_ID"
                cmbSubCategory.databind();
                sqlconn.Close()
            End Sub
    

    希望对你有帮助

    【讨论】:

    • 是的,先生,对不起,我写了 SUB_CATEGORY_COMBO_BOX 和 CATEGORY_COMBOBOX,但我的代码实际上是 cmbCategory 和 cmbSubCategory
    • @ivandinglasan:根据您的代码,您已将 cmbCategory.text 作为参数传递给选择查询,并且您已将数据源绑定到相同的 cmbCategory。那就是问题所在。请查看修改后的代码。
    【解决方案4】:
     Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged
            ComboBox2.Items.Add(ComboBox1.SelectedIndex)
        End Sub
    

    我觉得是这样的,你想要的是,你在1combobox上选择的,会显示到combobox2上吗?是这样的吗?

    更新

         Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles 
    
    sqlconn.Open()
        Dim da1 As New SqlDataAdapter("SELECT Column_name FROM tblOfficeEquipmentSubCategory 
    WHERE column_name_ = '" % & combobox1.selecteditem & % "'", sqlconn)
       From here >>> Dim dt1 As New DataTable
        da1.Fill(dt)
        cmbsubCategory.DataSource = dt1
        cmbsubCategory.DisplayMember = "SUBCAT_Name"
        cmbsubCategory.ValueMember = "SUBCAT_ID"
        sqlconn.Close()
                        End Sub <<< till here, you need to change yourself
    

    【讨论】:

    • 有点像先生,我更清楚一点,类别组合框数据是 1. 计算机 2. 打印机子类别组合框数据是 1.dell 计算机、hp 计算机、epson 打印机、hp 打印机所以当我在类别组合框中选择计算机,它不会显示爱普生打印机和惠普打印机,只显示戴尔计算机和惠普计算机
    • sir 在设置数据源或数据绑定时无法添加项目
    • 有些类似的,我又重新编辑了。实际上,您的问题是我几天后会遇到的问题。但我认为这实际上可以工作。除此之外,您仍然需要数据库中的主键和外键来链接它并使其更简单
    • 是的,先生,它使用外键和主键链接,我试一试先生
    • 在 % 上返回错误,我认为它在使用通配符(如搜索 sql 语法)时类似于 '%'
    【解决方案5】:
     Dim sqlconn As New SqlClient.SqlConnection
        sqlconn.ConnectionString = "server = SKPI-APPS1;" & _
        "Database = EOEMS;integrated security=true"
    
        Dim dt As New DataTable
    
        sqlconn.Open()
        Dim da As New SqlDataAdapter("SELECT SUBCAT_ID FROM tblOfficeEquipmentSubCategory WHERE CAT_ID = '" & cmbCategory.Text & "'", sqlconn)
        da.Fill(dt)
        cmbSubCategory.DataSource = dt
        cmbSubCategory.DisplayMember = "SUBCAT_Name"
        cmbSubCategory.ValueMember = "SUBCAT_ID"
        sqlconn.Close()
    

    得到正确答案谢谢大家

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-31
      • 2013-04-25
      • 2017-04-14
      • 1970-01-01
      相关资源
      最近更新 更多