c# - Combobox.Text.Equals 不测试预期值

标签 c# winforms combobox

我当前正在修改现有应用程序,删除旧的 UI 元素并用标准 WinForms 组件替换它们。所以这段代码看起来是有效的。

我的代码在不应该通过的情况下通过了条件 IF 检查。每个组合框的文本是 <Any>默认情况下,因此他们应该跳过封装的代码。

(选择过滤器后,它们会替换默认文本以选择 SQL 查询的正确部分来返回结果)

现在是奇怪的部分! 文本属性将显示为 System.Data.DataRowView对于我的一些组合框文本。最初,这发生在所有人身上,但现在第一个检查显示为 <Any>如预期。 (虽然我根本没有改变任何东西)

Screenshot of problem 正如您在调试期间的代码屏幕截图中看到的。 cbRegGroup.Text 的固定值是 System.Data.DataRowView但是当我输入属性列表并向下滚动到文本属性时,它显示为 <Any> .

我已经清理并重建了我的项目...并咨询了一所大学,但我们都无法弄清楚为什么文本值看起来像 .ToString()'ed 对象。

我不知道下一步该做什么。有什么建议吗?

    private void LoadPupilView()
    {
        try
        {
            this.Cursor = Cursors.WaitCursor;

            dgMain.Rows.Clear();
            //now populate list view
            String filter = "[surname] LIKE '" + SearchString + "%'";
            if (!cbYearGroup.Text.Equals("<Any>"))
            {
                String YearGroupCode = null;
                try
                {
                    YearGroupCode = cbYearGroup.SelectedValue.ToString();
                }
                catch { }

                if (!String.IsNullOrEmpty(YearGroupCode))
                    filter = filter + " AND [yearGroup] LIKE '" + YearGroupCode + "'";
            }

            if (!cbRegGroup.Text.Equals("<Any>"))
            {
                String RegGroupCode = null;
                try
                {
                    RegGroupCode = cbRegGroup.SelectedValue.ToString();
                }
                catch { }

                if (!String.IsNullOrEmpty(RegGroupCode))
                    filter = filter + " AND [registrationGroup] LIKE '" + RegGroupCode + "'";
            }

            if (!cbHouse.Text.Equals("<Any>"))
            {
                String HouseGroupCode = null;
                try
                {
                    HouseGroupCode = cbHouse.SelectedValue.ToString();
                }
                catch { }

                if (!String.IsNullOrEmpty(HouseGroupCode))
                    filter = filter + " AND [houseGroup] LIKE '" + HouseGroupCode + "'";
            }

            DataRow[] dataRows = tblPupils.Select(filter);
            foreach (DataRow datarow in dataRows)
            {
                dgMain.Rows.Add(new object[] { 
                    datarow[0].ToString(),
                    datarow[1].ToString() + " " + datarow[2].ToString(),
                    datarow[5].ToString(),
                    datarow[4].ToString(),
                    datarow[6].ToString(),
                    datarow[3].ToString()
                });

            }
        }
        catch (Exception err)
        {
            MessageBox.Show("Error : " + err.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
        finally
        {
            this.Cursor = Cursors.Default;
        }


    }

我很想知道为什么这似乎不一致......为什么第一个条件检查通过了?当其余的不是时,尽管它们是相同的。

最佳答案

您需要将ComboBoxDisplayMember 属性设置为要显示的列的名称。

关于c# - Combobox.Text.Equals 不测试预期值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9588735/

相关文章:

c# - 使用分部类扩展 WebControl

c# - Windows 窗体 TreeView 始终选择焦点上的节点

javascript - datagrid easyui 中的依赖组合框

c# - 在调用 Xdocument.save 之前应该跳过的字符

c# - 在哪里可以找到好的 FFT 示例实现/教程?

c# - NUnit 能经得起 TestNG 吗

.net - 使用 .NET 检测互联网连接的最佳方法是什么?

c# - 如何防止在 AddingNew 事件中将项目添加到 BindingList 中?

javascript - 组合框内的标签和条件多选

wpf - 使 WPF 组合框填充整个列宽