【发布时间】:2016-02-24 12:37:21
【问题描述】:
我正在努力将数据库中的变量更改为可用的 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 的字符串版本。当我将 DisplayMember 设置为“PayrollNo”时,组合框会显示 1 和 2,依此类推,因为在 SELECT 查询中选择了 Int。
为什么 BadNumber 采用分配给 DropBoxEmp.ValueMember 的文字而不是数字?任何帮助将不胜感激。
【问题讨论】:
-
"PayrollNo" 是数据库中列的名称?如果此名称不匹配,您只需将其选择为字符串。
-
是 PayrollNo 是数据库中第一列的名称。
-
您是否使用调试器检查了表值,以查看您是否从执行查询中得到了您期望的结果?打印 table.Rows[0][1].ToString().
-
查询执行得很好,我在代码中使用中断检查并打开表视图。第一列有 PayrollNo,第二列有附加名称
标签: c# ms-access combobox type-conversion