通過說我在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