在程序中,我尝试将数据表设置为全局变量,然后在不同的类中编辑列表框中具有选定ID的行。它在某种程度上工作,如果我选择一个 ID,它将设置变量,当我尝试在不同的类中使用它来编辑数据库中的详细信息时,它不显示所选 ID 的行,而是显示数据库中的最后一行。
设置全局变量的代码:
FileReader details = new FileReader();
Guest gst = new Guest();
DataTable guestDetails;
guestDetails = details.LoadingGuestsFromDatabase();
foreach (DataRow row in guestDetails.Rows)
{
if (lstGuest.SelectedItem.ToString() == row["Guest_ID"].ToString())
{
lblName.Text = row["Name"].ToString();
lblEmail.Text = row["Email"].ToString();
lblAge.Text = row["Age"].ToString();
lblPhoneNo.Text = row["Phone_Number"].ToString();
lblRoomType.Text = row["Room_Type"].ToString();
Globals.setCurrent(guestDetails);
}
当使用来宾详细信息数据表设置 setCurrent 时,它将继续转到用于编辑来宾的窗体,如下所示:
DataTable editedGuest;
editedGuest = Globals.getCurrent();
foreach (DataRow rows in editedGuest.Rows)
{
txtUpdateName.Text = rows["Name"].ToString();
txtUpdateAge.Text = rows["Age"].ToString();
txtUpdateEmail.Text = rows["Email"].ToString();
txtUpdatePhone.Text = rows["Phone_Number"].ToString();
}
现在要发生的是显示所选来宾的详细信息,而不是数据库中的最后一个来宾!我不确定是否需要创建另一个SQL命令来获取选定的来宾?任何建议都会有所帮助!谢谢。
我认为您需要向其添加更多代码:
foreach (DataRow rows in editedGuest.Rows)
{
if(rows["ID"].ToString().Equals(dropDownList.SelectedValue.ToString()))
{
txtUpdateName.Text = rows["Name"].ToString();
txtUpdateAge.Text = rows["Age"].ToString();
txtUpdateEmail.Text = rows["Email"].ToString();
txtUpdatePhone.Text = rows["Phone_Number"].ToString();
break;
}
}
或者可以使用 Linq 查询数据表。