如何在主窗口中显示数据库中新插入的记录?

时间:2013-09-23 09:46:24

标签: c# sql wpf

我正在为拍卖制作一个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时,它会为我打开一个新表单并填写新的拍卖信息,当我点击OK时,没有任何反应。我必须关闭我的应用程序并再次打开它以向我显示DataBase中新插入的记录。

我在代码中缺少什么? 当我按OK时,我需要自动刷新(更新)主窗口...

2 个答案:

答案 0 :(得分:2)

MainForm(打开更新表单的位置)中,使用以下代码替换当前打开更新表单的部分:

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);
}

编辑:将以下内容添加到Form2类的button1_click方法中:

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

答案 1 :(得分:1)

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

您可以在插入窗体上尝试ItemName,StartPrice,CurrentPrice等公共属性,使用插入值填充它们,然后在主窗口中获取它们并添加到datagrid中

像这样

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;
        }


    }
}