c#combobox使用文本设置值

时间:2014-07-31 08:54:55

标签: c# winforms combobox windows-forms-designer

我有一个组合框farmRegion我以这种方式填写

private void fillRegionData() {
            DataTable dt = new DataTable();
            dt.Columns.Add("ID", typeof(int));
            dt.Columns.Add("Description", typeof(string));
            farmRegion.ValueMember = "ID";
            farmRegion.DisplayMember = "Description";
            farmRegion.SelectedValue = "ID";
            for (int i = 0; i < StaticData.RegionNames.Count; i++)
            {
                dt.Rows.Add(StaticData.RegionValues[i], StaticData.RegionNames[i]);
            }
            farmRegion.DataSource = dt;
        }

其中StaticData.RegionNames是:

public static List<string> RegionNames = new List<string>() { "Select Region", "EASTERN", "WESTERN", "NORTHERN", "EASTERN2", "NORTHERN", "MIDDLE" };

StaticDate.RegionValues

public static List<string> RegionValues = new List<string>() { "-10", "1", "2", "3", "4", "5", "6" };

当我保存表单时,我保存了组合框的文本不是值(这是一个需求问题)。

现在我想再次重新加载comboxbox。 我已经知道了文字,但是我需要让组合框闪光并且选项文本已被选中。

我试过了:

farmRegion.Text = myText

但仍然选择了第一个选项。

3 个答案:

答案 0 :(得分:5)

在设置文本之前farmRegion.Text = myText设置一个断点并检查combobox数据源,并确保myText中存在combobox

如果您处理了任何events of combobox,就该事件设置了一个断点并检查执行farmRegion.Text = myText语句后发生的事情。

这两个步骤无法解决您的问题,然后找出文本值的索引为

int index = farmRegion.FindString(myText);
farmRegion.SelectedIndex = index;

答案 1 :(得分:1)

你可以试试这个

farmRegion.SelectedIndex = farmRegion.FindStringExact(myText)

另一种方法: 注意:如果找不到该项,则可能会抛出argumentexception

farmRegion.SelectedIndex = farmRegion.Items.IndexOf(myText);

答案 2 :(得分:0)

尝试这样,

DataRow[] drs = ((DataTable)cmb.DataSource).Select("Description='" + myText + "'");
if (drs.Length > 0)
{
    cmb.SelectedValue = drs[0]["ID"].ToString();
}
else
{
    //Value not found
}

<强>编辑:

有时,当您设置组合框文本时,ValueMember不会返回SelectedValue的值,它可能会返回nullSelectedIndex可能会返回-1