【问题标题】:Get rid of all null values in Combobox after iport data from mysql database从 mysql 数据库导入数据后,去掉 Combobox 中的所有空值
【发布时间】:2026-02-04 11:10:02
【问题描述】:

我正在为我的办公室开发一些 winforms 应用程序。在我的应用程序中,我有 50 多个组合框,我想连接 MySQL 数据库并检索数据。每个组合框都应该从某个 MySQL 数据库列中检索数据。我使用以下代码成功建立连接并将数据检索到组合框的任何方式。

但现在我有一个很奇怪的问题。在我的 MySQL 数据库中有很多空值(有些列包含 30 行,而有些只有 1 或 2 行)。数据检索组合框后,第一个组合框(与第二列相关)正确显示数据,但从第二列开始,它只显示一或两行。列中的所有其他值未显示。我浏览了一些论坛并将我的 al null 值设置为空字符串。但在那之后,组合框会在最后一个字段之后向我显示空白条目列表。

我在查询后也尝试了 IS NOT NULL,这也不起作用:(

如何克服这种情况?我想将数据检索到所有组合框并且没有任何空值或空值。我正在使用 .net 框架 2.0

这是否可以在 C# 或 SQL 查询中以编程方式进行,或者我应该更改我的数据库结构吗?

(我对 MySQL 不太了解。我使用工作台创建数据库:()

这是我当前的代码

 void combobox()
    {

        string constring = string.Format("datasource='{0}';port='{1}';database='{2}';username=****************;password=************;Connect Timeout=180;Command Timeout=180", dbserverip.Text,curport.Text,currentdb.Text);
        string Query = "select * from estifdb.customconditions ;";
        MySqlConnection conn = new MySqlConnection(constring);
        MySqlCommand cmd = new MySqlCommand(Query, conn);
        MySqlDataReader myreader666;

        try
        {
            conn.Open();
            myreader666 = cmd.ExecuteReader();


            while (myreader666.Read())
            {

                string sName = myreader666.GetString("someval1");
                applicationcombobox.Items.Add(sName);

                string sName2 = myreader666.GetString("someval2");
                applicationcombobox2.Items.Add(sName2);

                string sName3 = myreader666.GetString("someval3");
                applicationcombobox3.Items.Add(sName3);

                string sName4 = myreader666.GetString("someval4");
                applicationcombobox4.Items.Add(sName4);

                string sName5 = myreader666.GetString("someval5");
                applicationcombobox5.Items.Add(sName5);


               // and 50 left

【问题讨论】:

    标签: c# mysql combobox notnull


    【解决方案1】:

    我认为你需要这样的东西:

      while (myreader666.Read()) {
        for (int i = 0; i < myreader666.FieldCount; ++i) {
          if (reader.IsDBNull(i))
            continue;
    
          String fieldName = myreader666.GetName(i);
          String fieldValue = myreader666.GetValue(i).ToString();
    
          //TODO: write a method to find out ComboBox by field name
          ComboBox combo = GetComboByFieldName(fieldName);
    
          if (combo != null)
            combo.Items.Add(fieldValue);
        }
      }
    

    必须实现一种方法,通过其字段名称

    找出正确的ComboBox

    【讨论】:

      【解决方案2】:
      if(myreader666.GetString("someval1") != null)
      {
           string sName = myreader666.GetString("someval1");
           applicationcombobox.Items.Add(sName);
      }
      

      你可以这样做。可能您也不想将 empty.string 添加到组合框。在这种情况下添加到if(myreader666.GetString("someval1") != null &amp;&amp; myreader666.GetString("someval1").Trim() != "")

      你的设计很糟糕,你可以用 for 循环检查答案!

      编辑:

      if(myreader666.GetString("someval1") != null)
      {
           string sName = myreader666.GetString("someval1");
           applicationcombobox2.Items.Add(sName);
      }
      
      if(myreader666.GetString("someval2") != null)
      {
           string sName2 = myreader666.GetString("someval2");
           applicationcombobox.Items.Add(sName2);
      }
      

      对于每个 someval 以此类推

      【讨论】:

      • 感谢您的旅游回答先生。但是在应用您的代码之后,现在只有第一个组合框向我显示所有其余组合框的值都是黑色的 :(。有没有其他方法可以在没有 while 循环的情况下做到这一点?
      • @charith 你应该写这个 if 对于每个 someval 不仅仅是第一个。这应该在不同的 if 语句中完成。检查编辑
      • 我又做了一次。但这次没有运气,所有组合框只显示 2 个值:(
      • 先生,如果可能的话,您能否查看我的代码并通过 teamviewer 检查它? :(因为这是我申请的最后一部分,但我不知道如何克服这个
      【解决方案3】:

      你是否也尝试过这样的事情:

      string sName = myreader666.GetString("1003");
      if(sName != null && !sName.Equals(""))
          applicationcombobox.Items.Add(sName);
      

      【讨论】:

      • 甚至if(!string.IsNullOrEmpty(sname))
      【解决方案4】:

      尝试使用 ABS,如 SELECT ABS(column_name) AS AbsoluteA FROM YourTable

      【讨论】: