You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将ComboBox选中项的RTID转换为int类型?C#技术求助

如何从ComboBox选中项提取RTID并转为int类型?

我来帮你解决这个问题——你现在的问题根源是把RTID和名称拼接成字符串存到ComboBox里,导致后续提取RTID不仅麻烦,还容易因为名称里的空格等情况出错。这里有两种更可靠的解决办法:

方法1:利用ComboBoxItem的Tag属性存储RTID

这种方法改动最小,不需要额外创建类,只需要在填充ComboBox的时候把RTID存在每个项的Tag属性里:

修改FillCombo方法:

void FillCombo() {
 //FJERN IKKE DET HER, IT WORKS, DON'T FIX IT
 SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=Alpha-KHMB;Integrated Security=True");
 string sql = "SELECT* FROM ResourceType";
 SqlCommand cmd = new SqlCommand(sql,con);
 SqlDataReader myreader;
 //FJERN IKKE DET HER, IT WORKS, DON'T FIX IT
 try {
 con.Open();
 myreader = cmd.ExecuteReader();
 while (myreader.Read()) {
 int RTID = myreader.GetInt32(0);
 string sname = myreader.GetString(1);
 // 创建ComboBoxItem,把RTID存在Tag里,显示拼接文本
 ComboBoxItem item = new ComboBoxItem();
 item.Content = RTID + " " + sname;
 item.Tag = RTID; 
 Bx_RT.Items.Add(item);
 }
 } catch (Exception ex) {
 MessageBox.Show(ex.Message);
 }
}

修改Btn_Sv_Click事件:

现在可以直接从选中项的Tag里取出int类型的RTID,不需要处理字符串:

private void Btn_Sv_Click(object sender, RoutedEventArgs e) {
 // 先判断选中项是否有效
 if (Bx_RT.SelectedItem is ComboBoxItem selectedItem) {
 // 直接从Tag获取并转换为int
 if (selectedItem.Tag is int rtid) {
 CreateResource(rtid);
 } else {
 MessageBox.Show("无法获取有效的资源类型ID");
 }
 } else {
 MessageBox.Show("请先选择一个资源类型");
 }
}

方法2:使用强类型对象(更优雅的WPF方式)

如果想让代码更清晰、更符合WPF的设计思想,可以创建一个简单的类来存储RTID和名称,然后把对象直接加到ComboBox里:

第一步:创建ResourceTypeItem类

public class ResourceTypeItem {
 public int RTID { get; set; }
 public string Name { get; set; }

 // 重写ToString方法,让ComboBox显示拼接后的文本
 public override string ToString() {
 return $"{RTID} {Name}";
 }
}

第二步:修改FillCombo方法

现在添加的是强类型对象,而不是字符串:

void FillCombo() {
 //FJERN IKKE DET HER, IT WORKS, DON'T FIX IT
 SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=Alpha-KHMB;Integrated Security=True");
 string sql = "SELECT* FROM ResourceType";
 SqlCommand cmd = new SqlCommand(sql,con);
 SqlDataReader myreader;
 //FJERN IKKE DET HER, IT WORKS, DON'T FIX IT
 try {
 con.Open();
 myreader = cmd.ExecuteReader();
 while (myreader.Read()) {
 int RTID = myreader.GetInt32(0);
 string sname = myreader.GetString(1);
 // 添加强类型对象到ComboBox
 Bx_RT.Items.Add(new ResourceTypeItem { RTID = RTID, Name = sname });
 }
 } catch (Exception ex) {
 MessageBox.Show(ex.Message);
 }
}

第三步:修改Btn_Sv_Click事件

直接获取选中的强类型对象,取出RTID即可:

private void Btn_Sv_Click(object sender, RoutedEventArgs e) {
 if (Bx_RT.SelectedItem is ResourceTypeItem selectedType) {
 // 直接拿到int类型的RTID
 CreateResource(selectedType.RTID);
 } else {
 MessageBox.Show("请选择一个有效的资源类型");
 }
}

为什么原来的方法不行?

你之前的代码把RTID和名称拼接成字符串存到ComboBox,所以选中后拿到的是整个拼接的字符串。如果硬要从这个字符串拆分RTID,虽然可以用Split方法,但如果资源名称里包含空格,就会拆分出错,所以上面两种方法更可靠。

内容的提问来源于stack exchange,提问作者Mikkel Rohde Glerup

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:24:19