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 的文字而不是数字?任何帮助将不胜感激。

C# 将字符串从 Access 数据库和组合框转换为 int

你想要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
}