我当前正在修改现有应用程序,删除旧的 UI 元素并用标准 WinForms 组件替换它们。所以这段代码看起来是有效的。
我的代码在不应该通过的情况下通过了条件 IF 检查。每个组合框的文本是 <Any>
默认情况下,因此他们应该跳过封装的代码。
(选择过滤器后,它们会替换默认文本以选择 SQL 查询的正确部分来返回结果)
现在是奇怪的部分!
文本属性将显示为 System.Data.DataRowView
对于我的一些组合框文本。最初,这发生在所有人身上,但现在第一个检查显示为 <Any>
如预期。 (虽然我根本没有改变任何东西)
正如您在调试期间的代码屏幕截图中看到的。 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;
}
}
我很想知道为什么这似乎不一致......为什么第一个条件检查通过了?当其余的不是时,尽管它们是相同的。
最佳答案
您需要将ComboBox
的DisplayMember
属性设置为要显示的列的名称。
关于c# - Combobox.Text.Equals 不测试预期值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9588735/