C# 将字符串从 Access 数据库和组合框转换为 int
本文关键字:组合 转换 int 数据库 字符串 Access | 更新日期: 2023-09-27 18:35:56
我正在努力将数据库中的变量更改为可用的 Int,以便我可以与数据库进行比较以删除行。
这是我使用的代码:
private void EditEmployee_Load(object sender, EventArgs e)
{
DataTable table = new DataTable(); //creates a Table to store the data before populating the ComboBox
string connstring = @"Provider = Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|''HoliPlanData.accdb;Persist Security Info=False";
try
{
using (OleDbConnection conn = new OleDbConnection(connstring))
{
conn.Open();
string query = "SELECT PayrollNo, (FirstName + ' ' + LastName) AS NAME FROM [Employee]";
OleDbDataAdapter adapter = new OleDbDataAdapter(query, conn);
adapter.Fill(table);
DropBoxEmp.DataSource = table;
DropBoxEmp.DisplayMember = "NAME";
DropBoxEmp.ValueMember = "PayrollNo";
string BadNumber = DropBoxEmp.ValueMember;
int GoodNumber = Int32.Parse(BadNumber);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
问题是字符串 BadNumber 设置为字符串"PayrollNo",而不是 Datatable 将 PayrollNo 存储为 Int 的字符串版本。当我将显示成员设置为"工资单编号"时,组合框显示 1 和 2,依此类推,因为在 SELECT 查询中选择的 Int。
为什么 BadNumber 采用分配给 DropBoxEmp.ValueMember 的文字而不是数字?任何帮助将不胜感激。
你想要DropBoxEmp.SelectedItem
,而不是ValueMember
。您误解了ValueMember
属性是什么。它告诉组合框将其绑定中的哪个字段用作支持值。
要拆箱,请执行以下操作:
var theItem = DropBoxEmp.SelectedItem as DataRowView;
MessageBox.Show(theItem[0].ToString());
-- 顺便说一句,数据适配器将打开连接,因此您无需这样做。
尝试使用列名和行索引来获取值:
if(table.Rows.Count==1) // if it's supposed to be unique
{
int GoodNumber = Int32.Parse(table.Rows[0]["PayrollNo"].ToString());
}
else
{
//Show some error
}