通过说我在wpf中使用c#开始,所以我在我的主窗口(SalesScreen)中有一个列表框的新问题。我有一个名为SearchScreen的窗口,它有一个从sql server上的表填充的数据网格。现在我的目标是能够从此数据网格中选择一行,然后单击一个表示“添加到购物车”的按钮。单击此按钮时,它将成功将所选行发送到正在主窗口上填充Listbox的新表。请记住两个窗口同时保持打开状态。所以我遇到的问题是当服务器上tblCart变化时,ListBox不会自动更新。有关如何做到这一点的任何建议?我再一次在c#的初学者阶段。从sql server表中更新另一个窗口上的列表框,c#wpf
这是我的XAML启动列表框(只是一个基本的列表框):
<ListBox Height="261" HorizontalAlignment="Left" Margin="43,69,0,0" Name="listBox1" VerticalAlignment="Top" Width="240"/>
这是用于改变文本框上SalesScreen(主窗口)的方法。当文本框更改事件发生时,该行被添加到服务器,并且窗口中的ListBox被正确更新。我试图用“添加到购物车”按钮点击这个事件,但它没有改变。现在,如果我使用SearchScreen上的“Add to Cart”按钮,然后回到主窗口并执行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事件从同一个窗口更新它,但是当它涉及到从一个窗口发送到另一个我这一挑战最不成功。任何建议将不胜感激。
在您的按钮单击事件有当执行你的命令没有打开的连接。 – Derek 2013-04-29 15:18:31
当时连接已经打开,但我确实尝试过,但是刚刚告诉我连接从未关闭。 – Shawn 2013-04-29 15:22:37
只有在需要时,才应该打开连接。每个连接都应该打开并在完成后尽快处理。您可以使用Using Statement(自动封装和关闭连接)或使用Try/Catch语句来捕获任何异常。在finally语句中,关闭连接。 – Derek 2013-04-29 15:34:40