gpt4 book ai didi

c# - 在 C# WinForms 中添加新项目后更新 ListView

转载 作者:太空宇宙 更新时间:2023-11-03 22:58:30 25 4
gpt4 key购买 nike

我有一个 ListView,它绑定(bind)来自数据库的数据。这是从数据库绑定(bind)日期的代码。添加新项目后, ListView 不会更新。但是在数据库中,表会更新。我用来绑定(bind) ListView 的代码:

public void BindIncomeExpense()
{
SqlConnection con = new SqlConnection(@"Data Source=DESKTOP-U1OP1S9\SQLEXPRESS;Initial Catalog=PaintStores;Integrated Security=True");
SqlCommand command = con.CreateCommand();
command.CommandText = "sp_getAllIncomeExpense";

SqlDataAdapter da = new SqlDataAdapter(command);
DataTable dataTable = new DataTable();
da.Fill(dataTable);

for(int i = 0; i < dataTable.Rows.Count; i++)
{
DataRow drow = dataTable.Rows[i];
// Only row that have not been deleted
if(drow.RowState != DataRowState.Deleted)
{
// Define the list items
ListViewItem lvi = new ListViewItem(drow["Description"].ToString());
lvi.SubItems.Add(drow["Category"].ToString());
lvi.SubItems.Add(drow["Amount"].ToString());
lvi.SubItems.Add(drow["Date"].ToString());

listView9.Items.Add(lvi);
}
}
con.Close();
}

并添加新项目

private void button1_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection(@"Data Source=DESKTOP-U1OP1S9\SQLEXPRESS;Initial Catalog=PaintStores;Integrated Security=True");
SqlCommand cmd = new SqlCommand("sp_saveIncomeExpense", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@id", comboBox12.SelectedValue);
cmd.Parameters.AddWithValue("@description", textBox1.Text);
cmd.Parameters.AddWithValue("@amount", textBox2.Text);
cmd.Parameters.AddWithValue("@date", dateTimePicker12.Value);
con.Open();
int i = cmd.ExecuteNonQuery();

con.Close();

if(i != 0)
{
MessageBox.Show("Data Saved Successfully");
this.Close();
}

Main frm = new Main();
frm.BindIncomeExpense();
}

而且我不明白为什么存储过程没有将最后添加的数据返回到 ListView 。在数据库中,当我执行 sp 时,它也返回最后的数据。

最佳答案

Main frm = new Main();
这可能是问题所在。您正在创建新的表单实例。这可能与屏幕上显示的不一样。使用您用于在屏幕上显示表单的相同实例。

例如,在您的代码中的某处,您已经使用

加载了 Main 表单
Main frmOriginal = new Main();
frmOriginal.Show();// or ShowDialog or Application.Run

您的frmOriginal 实例在调用绑定(bind)方法时应该可以访问。您的新代码应该类似于:

//Main frm = new Main();//Do not use this
frmOriginal.BindIncomeExpense();//Use the instance of form that is already being displayed.

编辑:

根据您的评论,您需要将 Main 表单的实例传递给 IncomeExpense 表单。
以下代码将在 Main 表单上创建 IncomeExpense 表单:

IncomeExpense incomeExpense = new IncomeExpense();
incomeExpense.ShowDialog(this);

IncomeExpense 表单上:

//Main frm = new Main();//Do not use this
this.Owner.BindIncomeExpense();

关于c# - 在 C# WinForms 中添加新项目后更新 ListView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44261024/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com