C#Windows窗体设置选定的索引组合框的值

时间:2014-05-08 16:00:53

标签: c# mysql winforms combobox selectedindex

在此网站上搜索后,我无法找到正确的解决方案并需要帮助。

我试图修改用户的字段(我模拟用户想要更改他们的城市)

我有一张这样的表:

+---------+---------------------+
| id_city | name                |
+---------+---------------------+
|       1 | India               |
|       2 | Irland              |
|       3 | France              |
+---------+---------------------+

当我启动查询并获得结果时,我需要的是:

+---------+---------------------+
| id_city | name                |
+---------+---------------------+
|       3 | France              |
|       1 | India               |
|       2 | Irland              |
+---------+---------------------+

在我的C#代码初始化窗体时,我填充组合框:

modifyCityUserComboBox.ValueMember = "id_city";
modifyCityUserComboBox.DisplayMember = "name";
modifyCityUserComboBox.DataSource = dataTable;

然后我尝试将组合框放入用户所拥有的城市,但在这部分我遇到了问题。当我这样做时:

modifyCityUserComboBox.SelectedIndex = userDto.GetIdCity();

(认为印度是用户的原始城市,并希望改变它)

我有这个错误= "Invalid argument= The value of '1' is not valid for 'SelectedIndex. Parameter name= SelectedIndex".

我发现组合框在0开始选择指数,如果我不订购城市,我只需要这样做:

modifyCityUserComboBox.SelectedIndex = userDto.GetIdCity() - 1;

这个"技巧" IdCity它的0和组合框接受它,但我不想这样做。我想要展示订购的城市。

我已尝试设置True the Sort组合框属性,而不是在mysql查询中对城市进行排序,但我得到了相同的错误......

任何人都知道我该怎么办?谢谢!

2 个答案:

答案 0 :(得分:0)

使用modifyCityUserComboBox.SelectedValue=userDto.GetIdCity();

答案 1 :(得分:0)

我不知道你是如何设置你的课程的,但这就是我如何完成它并且它的工作原理。首先,我将所有城市从数据库插入ComboBox构造函数中的Form1列表。之后,您可以按button1上的Form1更改城市,具体取决于Userbutton1_Click事件。让我向您展示Form1

Form


主要方法:

public Form1()
{
    InitializeComponent();

    List<DataTable> dataTable = new List<DataTable>();

    string path = @"server=.\sqlexpress;database=Cities;integrated Security=True;";

    using (SqlConnection con = new SqlConnection(path))
    {
        SqlCommand cmd = con.CreateCommand();
        cmd.CommandText = "select id_city, name from city order by name";
        try
        {
            con.Open();

            using (SqlDataReader dr = cmd.ExecuteReader())
            {
                while (dr.Read())
                {
                    dataTable.Add(new DataTable()
                    {
                        id_city = (int)dr["id_city"]
                       ,name = dr["name"] as string
                    });
                }
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "Error");
        }
    }

    BindingSource bs = new BindingSource() { DataSource = dataTable };
    comboBox1.ValueMember = "id_city";
    comboBox1.DisplayMember = "name";
    comboBox1.DataSource = bs;
}

DataTable类:

class DataTable
{
    public int id_city { get; set; }
    public string name { get; set; }
}

button1_Click事件:

private void button1_Click(object sender, EventArgs e)
{
    User user = new User("India");

    var myarr = comboBox1.Items.OfType<DataTable>().ToArray();

    foreach (var item in myarr)
    {
        if (item.name.Equals(user.city))
        {
            comboBox1.SelectedItem = item;
            break;
        }
    }
}

用户类:

class User
{
    public string city { get; set; }

    public User(string str)
    {
        city = str;
    }
}

您可以随意在数据库中插入更多城市,并在User事件中更改button1_Click的国家/地区。按你喜欢的方式修改它,希望这有帮助!