2013-09-23 29 views
0

我正在拍一个wpf申请。主窗口的样子:http://www54.zippyshare.com/v/91622733/file.html如何在主窗口中显示数据库中新插入的记录?

main window

主窗口代码:

namespace WpfApplication25 
{ 
    /// <summary> <br> 
    /// Interaction logic for MainWindow.xaml <br> 
    /// </summary> <br> 
    public partial class MainWindow : Window <br> 
    { 

     int count = 120; 
     System.Windows.Threading.DispatcherTimer tmr = new System.Windows.Threading.DispatcherTimer(); 

     public MainWindow() 
     { 
      InitializeComponent(); 

      tmr.Interval = new TimeSpan(0, 0, 1); 
      tmr.Tick += new EventHandler(tmr_Tick); 

      DataTable aukcijeTable = new DataTable(); 
      SqlConnection conn = new SqlConnection(@"data source=(local);database=Aukcija;integrated security=true;"); 
      SqlDataAdapter aukcDa = new SqlDataAdapter("select * from auctions", conn); 

      aukcDa.Fill(aukcijeTable); 
      aukcija_bazeDataGrid.DataContext = aukcijeTable; 


     } 



     void tmr_Tick(object sender, EventArgs e) 
     { 
      label1.Content = count -= 1; 
      if (count == 0) 
      { 
       System.Windows.Forms.MessageBox.Show("Auction completed"); 
       tmr.Stop(); 
       count = 120; 
      } 
      else 
      { 


      } 

     } 


     private void button1_Click(object sender, RoutedEventArgs e) 
     { 
      Form1 popup = new Form1(); 
      popup.ShowDialog(); 
      popup.Dispose(); 
     } 

     private void button3_Click(object sender, RoutedEventArgs e) 
     { 
      Form2 popup = new Form2(); 
      popup.ShowDialog(); 

      popup.Dispose(); 
     } 

     private void button2_Click(object sender, RoutedEventArgs e) 
     { 
      tmr.Start(); 

      using (SqlConnection conn = new SqlConnection(@"data source=(local);database=Aukcija;integrated security=true;")) 

      { 
       DataTable cena1 = new DataTable(); 
       conn.Open(); 
       SqlDataAdapter DA = new SqlDataAdapter(" UPDATE auctions SET current_price = current_price + 1", conn); 
       SqlCommand cmd = new SqlCommand ("UPDATE auctions SET current_price = current_price + 1", conn); 
       DA.Fill(cena1); 
       //DA.Update(cena1); 
       cmd.ExecuteNonQuery(); 
       SqlCommandBuilder cb = new SqlCommandBuilder(DA); //novo 
       DA.Update(cena1); //novo 
       conn.Close(); 

      } 

     } 


     private void aukcija_bazeDataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e) 
     { 

     } 

     private void button4_Click(object sender, RoutedEventArgs e) 
     { 

      tmr.Start(); 

     } 

     private void button5_Click(object sender, RoutedEventArgs e) 
     { 
      tmr.Stop(); 
      System.Windows.Forms.MessageBox.Show("Auction completed!"); 
      count = 120; 
     } 


    } 
} 

而且,我做了一个新的形式增加新的拍卖,它看起来像这样: http://www8.zippyshare.com/v/35519167/file.html

new auction

代码为新的形式:

namespace WpfApplication25 { 
public partial class Form2 : Form 
{ 
    public Form2() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     using (SqlConnection connection = new SqlConnection(
        @"data source=(local); 
        database=Aukcija; 
        integrated security=true;")) 
     { 
      DataTable aukcijeTable = new DataTable(); //novo 

      SqlCommand cmd = new SqlCommand("INSERT INTO Auctions (item_name, start_price, current_price) VALUES (@item_name, @start_price, @current_price)"); 
      cmd.CommandType = CommandType.Text; 
      cmd.Connection = connection; 
      connection.Open(); 
      cmd.Parameters.AddWithValue("@item_name", textBox1.Text); 
      cmd.Parameters.AddWithValue("@start_price", textBox2.Text); 
      cmd.Parameters.AddWithValue("@current_price", textBox3.Text); 
      cmd.ExecuteNonQuery();   
      connection.Close(); 



     } 
    } 
}} 

当我点击button1_Click它打开了我一个新的形式和我有新的拍卖信息填充它,当我点击确定没有任何反应。我必须关闭我的应用程序并再次打开它,以显示我从DataBase中新插入的记录。

我在代码中缺少什么? 我需要点东西刷新(更新)主窗口,当我按下确定...

回答

2

在你MainForm(你打开更新-F ORM)代替,你目前正在使用下面的代码打开更新的形式部分:

if (popup.ShowDialog() == System.Windows.Forms.DialogResult.OK) 
{ 
    //to update your DataGrid, try the following:    
    SqlConnection conn = new SqlConnection(@"data source=(local);database=Aukcija;integrated security=true;"); 
    SqlDataAdapter aukcDa = new SqlDataAdapter("select * from auctions", conn); 
    aukcDa.Update(aukcija_bazeDataGrid.DataContext as System.Windows.Forms.DataGrid); 
} 

编辑:以下内容添加到您的button1_click - 方法的窗体2级的:

this.DialogResult = System.Windows.Forms.DialogResult.OK; 
this.Close(); 
+0

这就是说,我不知道更新逻辑的代码... –

+0

@МаркоЛучић看看我的编辑;) –

+0

代码的一部分:if(updateForm.ShowDialog .. ... “updateForm”是什么意思?就是我的Form2? –

1

对不起,我无法访问您提供的链接。 你必须返回新添加的对象以显示在mainwindow中,我不知道以什么方式显示对象,它必须是我认为的datagrid,所以在将新创建的对象插入数据库后,必须添加手动将对象放入数据网格中。因为datagrid不知道新插入的对象。

您可以尝试公共属性,如ITEMNAME,StartPrice,CurrentPrice,在insertingForm,用插入值填充它们,并在主窗口,让他们并添加到数据网格

这样

namespace WpfApplication25 { 
public partial class Form2 : Form 
{ 
    public Form2() 
    { 
     InitializeComponent(); 
    } 

public string ItemName{get;set;} 
public string CurrentPrice{get;set;} 
public string StartPrice{get;set;} 

    private void button1_Click(object sender, EventArgs e) 
    { 
     using (SqlConnection connection = new SqlConnection(
        @"data source=(local); 
        database=Aukcija; 
        integrated security=true;")) 
     { 
      DataTable aukcijeTable = new DataTable(); //novo 
      ItemName = textBox1.Text; 
      CurrentPrice = textBox3.Text; 
      StartPrice = textBox2.Text; 
      SqlCommand cmd = new SqlCommand("INSERT INTO Auctions (item_name, start_price, current_price) VALUES (@item_name, @start_price, @current_price)"); 
      cmd.CommandType = CommandType.Text; 
      cmd.Connection = connection; 
      connection.Open(); 
      cmd.Parameters.AddWithValue("@item_name", textBox1.Text); 
      cmd.Parameters.AddWithValue("@start_price", textBox2.Text); 
      cmd.Parameters.AddWithValue("@current_price", textBox3.Text); 
      cmd.ExecuteNonQuery();   
      connection.Close(); 



     } 
    } 
}} 

,并在主窗口显示insertng形式获取属性值后

namespace WpfApplication25 
{ 
    /// <summary> <br> 
    /// Interaction logic for MainWindow.xaml <br> 
    /// </summary> <br> 
    public partial class MainWindow : Window <br> 
    { 

     int count = 120; 
     System.Windows.Threading.DispatcherTimer tmr = new System.Windows.Threading.DispatcherTimer(); 

private DataTable aukcijeTable;   
public MainWindow() 
     { 
      InitializeComponent(); 

      tmr.Interval = new TimeSpan(0, 0, 1); 
      tmr.Tick += new EventHandler(tmr_Tick); 

      aukcijeTable = new DataTable(); 
      SqlConnection conn = new SqlConnection(@"data source=(local);database=Aukcija;integrated security=true;"); 
      SqlDataAdapter aukcDa = new SqlDataAdapter("select * from auctions", conn); 

      aukcDa.Fill(aukcijeTable); 
      aukcija_bazeDataGrid.DataContext = aukcijeTable; 


     } 



     void tmr_Tick(object sender, EventArgs e) 
     { 
      label1.Content = count -= 1; 
      if (count == 0) 
      { 
       System.Windows.Forms.MessageBox.Show("Auction completed"); 
       tmr.Stop(); 
       count = 120; 
      } 
      else 
      { 


      } 

     } 


     private void button1_Click(object sender, RoutedEventArgs e) 
     { 
      Form1 popup = new Form1(); 
      popup.ShowDialog(); 
      popup.Dispose(); 
     } 

     private void button3_Click(object sender, RoutedEventArgs e) 
     { 
      Form2 popup = new Form2(); 
      if(popup.ShowDialog()== DialogResult.OK){ 

       var newRow = aukcijeTable.NewRow(); 
       newRpw[0] = popup.ItemName; 
       newRow[1] = popup.StartPrice; 
       newRow[2] = popup.CurrentPrice; 
       aukcijeTable.Rows.Add(newRow); 
       aukcija_bazeDataGrid.Refresh(); 

      } 

      popup.Dispose(); 
     } 

     private void button2_Click(object sender, RoutedEventArgs e) 
     { 
      tmr.Start(); 

      using (SqlConnection conn = new SqlConnection(@"data source=(local);database=Aukcija;integrated security=true;")) 

      { 
       DataTable cena1 = new DataTable(); 
       conn.Open(); 
       SqlDataAdapter DA = new SqlDataAdapter(" UPDATE auctions SET current_price = current_price + 1", conn); 
       SqlCommand cmd = new SqlCommand ("UPDATE auctions SET current_price = current_price + 1", conn); 
       DA.Fill(cena1); 
       //DA.Update(cena1); 
       cmd.ExecuteNonQuery(); 
       SqlCommandBuilder cb = new SqlCommandBuilder(DA); //novo 
       DA.Update(cena1); //novo 
       conn.Close(); 

      } 

     } 


     private void aukcija_bazeDataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e) 
     { 

     } 

     private void button4_Click(object sender, RoutedEventArgs e) 
     { 

      tmr.Start(); 

     } 

     private void button5_Click(object sender, RoutedEventArgs e) 
     { 
      tmr.Stop(); 
      System.Windows.Forms.MessageBox.Show("Auction completed!"); 
      count = 120; 
     } 


    } 
} 
+0

我已经编辑我的文章,看看照片...我已经试过你的代码,但仍然是相同的...如果你想,我会给你我的项目。谢谢 –

+0

你可以添加你的主窗口代码吗? – VahiD

+0

我已添加主窗口代码... –

相关问题