【发布时间】:2014-07-23 05:37:45
【问题描述】:
我正在用 C# 创建一个简单的注册系统,但我被困在必须定义场地/房间列表的地方。我尝试了所有其他类似的代码,但似乎没有任何效果。
这是场景:
我有一个名为enrollmentAdmin 的表单中的btnAddRooms 按钮和一个LBoxVenue 列表框,其中有一个列表的datasource(来自数据库)。每当单击btnAddRooms 时,都会显示另一个表单,其中包含一个文本框,以便将项目添加到列表框中(btnAdd 将键入的字符串添加到文本框中)。
enrollmentAdmin(第一种形式)代码如下:
public partial class enrollmentAdmin : Form
{
public List<String> listRooms = new List<String>();
private void enrollmentAdmin_Load(object sender, EventArgs e)
{
Connection.OpenConnection();
string query1 = "select distinct Venue from tblVenueListing;";
SqlCommand command1 = new SqlCommand(query1, Connection.conn);
using (SqlDataReader reader = command1.ExecuteReader())
{
while (reader.Read())
{
listVenue.Add(reader.GetString(0));
}
}
Connection.CloseConnection();
LBoxRooms.DataSource = listRooms;
}
}
btnAddRooms的代码如下(表格一):
form2 form = new form2();
form.Show();
this.Hide();
而 btnAdd 代码(在表格 2 下):
enrollmentAdmin form1 = new enrollmentAdmin();
Connection.OpenConnection();
string insertRoom = "insert into tblVenueListing values ('" + txtVenue.Text + "','" + txtRoom.Text + "');";
SqlCommand insert = new SqlCommand(insertRoom, Connection.conn);
insert.ExecuteNonQuery();
form1.listRooms.add(txtVenue.Text);
form1.LBoxRooms.DataSource = null;
form1.LBoxRooms.DataSource = form1.listRooms;
添加的项目不会在我添加项目后立即弹出,我仍然需要重新加载 form1 才能显示项目。
感谢任何帮助!谢谢!
编辑:找到解决方法,以便将更改立即显示到 UI 中。
我将列表变成了一个 BindingList,将其声明为静态并通过表单的名称而不是在 form2 上创建的对象实例来访问它。
所以而不是:
form1.listRooms.add(txtVenue.Text);
form1.LBoxRooms.DataSource = null;
form1.LBoxRooms.DataSource = form1.listRooms;
我做到了:
enrollmentAdmin.listRooms.add(txtVenue.Text);
form1.LBoxRooms.DataSource = null;
form1.LBoxRooms.DataSource = enrollmentAdmin.listRooms;
【问题讨论】: