我正在为拍卖制作一个wpf应用程序。主窗口如下所示:http://www54.zippyshare.com/v/91622733/file.html
主窗口代码:
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。
新表格的代码:
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时,我需要自动刷新(更新)主窗口...
答案 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)
您可以在插入窗体上尝试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;
}
}
}