我正在尝试通过列表框从表中删除行。下面是我用来将数据库中的数据显示到列表框中的代码。仅供参考 - 我正在使用日历搜索功能 - 用户在日历上选择日期,点击“搜索”,列表框会根据数据库中的日期显示相应的结果。
Con.Open():
SqlCommand cmd = new SqlCommand("Select Member, Clerk, Room, Time From Events where Date = @searchDate", con);
cmd.Parameters.AddWithValue("@searchDate",SearchDate.SelectedDate);
IDataReader reader = cmd.ExecuteReader();
while (reader.Read()){
string member = (string)reader["Member"];
string clerk= (string)reader["Clerk"];
string room = (string)reader["Room"];
string time = (string)reader["Time"];
lstEvents.Items.Add("Member: " + member + " -- " + "Clerk: " + clerk+ " -- " + "Room: " + room + " -- " + "Time: " + time);
//lstEvents is the ID of the listbox
}
reader.Close();
con.Close();
上面的代码工作得很好。我希望的是找到一种删除数据库中相应行的方法。因此,用户选择列表中的一个返回项并单击“删除”。我到目前为止......
SqlCommand cmd = new SqlCommand("Delete From Events where Member, Clerk, Room, Date, Time = @member, @clerk, @room, @date, @time", con);
cmd.Parameters.AddWithValue("@member", lstEvents.SelectedValue);
cmd.Parameters.AddWithValue("@clerk", lstAppointments.SelectedValue);
cmd.Parameters.AddWithValue("@room", lstEventss.SelectedValue);
cmd.Parameters.AddWithValue("@date", Convert.ToDateTime(SearchDate.SelectedDate);
cmd.Parameters.AddWithValue("@time", lstEvents.SelectedValue);
cmd.Connection = con;
cmd.ExecuteNonQuery();
这种尝试有点似乎有点牵强,有任何建议如何做到这一点?我不是特别明白如何选择多个值,即列表框中同一行的成员和职员。
答案 0 :(得分:2)
从数据库加载行时,还要加载主键(即使您不显示它)。
当您删除列表框中选择的内容时,只需使用主键删除即可。
如果您的表没有主键,那么您应该添加一个主键非常好。
答案 1 :(得分:0)
您最好的选择是使用数据绑定,您可以在此处创建具有ID的对象列表。执行此操作的最佳方法是创建一个新类并为其提供数据库的属性:
public class MyClass
{
public int Id {get; set;}
public string Member {get; set;}
public string Clerk {get; set;}
public string Room {get; set;}
public string Time {get; set;}
}
一旦你拥有了你的对象,你就可以"绑定"这是一个listboxitem控件
ASP.NET: Listbox datasource and databind
一旦你设法将列表对象绑定到listboxitem控件,就可以在按钮事件中执行这样的代码
MyClass selectedItem = (MyClass)yourcontrolname.SelectedItem;
// do stuff with selectedItem.Id (like delete an entry from the database