首先说我在 wpf 中使用 c#,所以我的主窗口(SalesScreen)中的列表框出现了这个新问题。我有一个名为 SearchScreen 的窗口,它有一个从 sql 服务器上的表填充的数据网格。现在我的目标是能够从这个数据网格中选择一行并单击一个显示“添加到购物车”的按钮。单击此按钮时,它将成功地将所选行发送到正在填充主窗口上的列表框的新表。请记住,两个窗口同时保持打开状态。所以我遇到的问题是当服务器上的 tblCart 更改时 ListBox 不会自动更新。关于如何做到这一点的任何建议?再一次,我仍然处于 c# 的初学者阶段。
这是我启动 ListBox 的 xaml(只是一个基本的 ListBox):
<ListBox Height="261" HorizontalAlignment="Left" Margin="43,69,0,0" Name="listBox1" VerticalAlignment="Top" Width="240"/>
这是一种用于在 SalesScreen(主窗口)上更改的文本框的方法。当文本框更改事件发生时,该行被添加到服务器,并且列表框在窗口中正确更新。我尝试通过单击“添加到购物车”按钮来调用此事件,但它没有任何变化。现在,如果我使用 SearchScreen 上的“添加到购物车”按钮,然后返回主窗口并执行 textboxchanged 事件,它将更新添加的两个项目。
public void addtoList()
{
cn.Open();
String cmdString = "Select Title, Price from tblCart";
SqlCommand cmd = new SqlCommand(cmdString, cn);
SqlDataReader dr = cmd.ExecuteReader();
double subT = 0;
double tax = 1.09;
double total = 0;
while (dr.Read())
{
int count = dr.FieldCount - 1;
for (int i = 0; i < count; i++)
{
listBox1.Items.Add(dr["Title"].ToString() + dr["Price"].ToString());
subT += Convert.ToDouble(dr["Price"]);
}
}
total = subT * tax;
subTotal.Text = subT.ToString();
totalBlk.Text = total.ToString();
cn.Close();
}
这是 addtoCart 按钮:
private void addBtn_Click(object sender, RoutedEventArgs e)
{
SalesScreen ss = new SalesScreen();
DataRowView drView = (DataRowView)dGrid.SelectedItem;
String s = Convert.ToString(drView.Row["ID"]);
String cmdString = "INSERT INTO tblCart(Title, GenreID, Price, Year, UML, Quantity) Select Title, GenreID, Price, Year, UML, Quantity FROM tblMovies WHERE ID = " + s;
SqlCommand cmd = new SqlCommand(cmdString, cn);
cmd.ExecuteNonQuery();
ss.addtoList();
}
所以基本上,我可以使用 textchanged 事件从同一个窗口更新它,但是当它从一个窗口发送到另一个窗口时,我在这个挑战中最不成功。任何建议将不胜感激。