在此网站上搜索后,我无法找到正确的解决方案并需要帮助。
我试图修改用户的字段(我模拟用户想要更改他们的城市)
我有一张这样的表:
+---------+---------------------+
| 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查询中对城市进行排序,但我得到了相同的错误......
任何人都知道我该怎么办?谢谢!
答案 0 :(得分:0)
使用modifyCityUserComboBox.SelectedValue=userDto.GetIdCity();
答案 1 :(得分:0)
我不知道你是如何设置你的课程的,但这就是我如何完成它并且它的工作原理。首先,我将所有城市从数据库插入ComboBox
构造函数中的Form1
列表。之后,您可以按button1
上的Form1
更改城市,具体取决于User
内button1_Click
事件。让我向您展示Form1
:
主要方法:
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
的国家/地区。按你喜欢的方式修改它,希望这有帮助!