我有两种形式。表单1在侧面有一个datagridview,表单2在里面有一个文本框和一个按钮。单击按钮后,在文本框中输入的值将插入datagridview中。 之前我使用过Show()和ShowDialog(),但是在点击按钮后会显示一个带有新数据的新表单。我也试过Update()和Refresh()但仍然无法正常工作?单击按钮后,我需要datagridview刷新,并且没有新表单出现。有人可以帮帮我吗?请....
这是我的代码:
表格1
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.dataGridView1.Rows.Add(46.13, 0, 0);
this.dataGridView1.Rows.Add(105.22, 0, 0);
this.dataGridView1.Rows.Add(80.67, 0, 0);
}
public void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
Form2 newMDIChild = new Form2();
// Set the parent form of the child window.
newMDIChild.MdiParent = this;
// Display the new form.
newMDIChild.Show();
}
表格2
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
FormTest.Form1 frm = new Form1();
frm.dataGridView1.Rows[0].Cells[0].Value = textBox1.Text;
frm.();
}
}
答案 0 :(得分:0)
表单2按钮单击“使用此代码”
private void button1_Click(object sender, EventArgs e)
{
Form frm=(Form)this.MdiParent;
DataGridView dt = (DataGridView)frm.Controls["dataGridView1"];
dt.Rows[0].Cells[0].Value = textBox1.Text;
}
答案 1 :(得分:0)
您可以使用一种方法创建回调接口以添加和更新数据。在form1中实现它,然后在form2中使用接口的参数类型创建一个新的构造函数,并在创建form2的对象时传递form1的引用(this
)。
调用接口的方法,并在gridview中将数据更新为参数。 form2中的接口对象保存form1的引用,它将调用form1中实现的函数更新网格。
interface ICallBack { void UpdateGrid(string data); }
public calss Class1 : ICallBack
{
// Rest of your code
void UpdateGrid(string data)
{
gridView.Rows[0].Cells[0].Value = data;
}
private void button1_Click(object sender, EventArgs e)
{
Class2 obj = new Class2(this);
obj.Show();
}
}
public calss Class2
{
ICallBack callback;
public Class2(ICallBack callback)
{
this.callback = callback;
}
private void button1_Click(object sender, EventArgs e)
{
callback.UpdateGrid(textBox1.Text);
}
}
希望它有所帮助!
答案 2 :(得分:0)
如果您希望在另一个表单上更新/刷新datagridview。我看到两种方法: 1. DataTable(创建数据表并创建datagridview的源,如果进行更改,您将意识到更改会立即影响datagridview)
以编程方式实现它如下:假设Form-1有datagridview,Form有一些控件,你想要添加/编辑/删除数据,想要在Form-1上更改Datagridview
在Form-2上创建一个构造函数:
Form myForm1-null;
public Form-2(Form objForm1)
{
myForm1=objForm1;
InitializeComponent();
}
现在您可以在任何事件中访问myForm1对象:
private void btnadd_Click(object sender, EventArgs e)
{
DataGridView dg = (DataGridView)myForm1.Controls["YourDataGridViewName"];
dg.Rows.Add();
}
现在来到Form-1并打开您调用Form-2的事件
private void btnShow_Click(object sender, EventArgs e)
{
Form-2 oFrm2 = new Form-2(this);
oFrm2.Show();
}
希望有所帮助
答案 3 :(得分:0)
最好的方法是使用委托。 使用如下代码。
假设MainForm具有数据网格。
主表单:
public MainForm()
{
InitializeComponent();
}
public void form2_UpdateEventHandler(object sender, Form2.UpdateEventArgs args)
{
dgvItems.DataSource = GetData();
}
private void MainForm_Load(object sender, EventArgs e)
{
dgvItems.DataSource = GetData();
}
public DataTable GetData()
{
SqlCommand cmd = con.CreateCommand();
cmd.CommandText = *your query*
adp = new SqlDataAdapter(cmd);
ds.Clear();
adp.Fill(ds);
dt = ds.Tables[0];
con.Close();
return dt;
}
//show Form 2
private void btnSave_Click(object sender, EventArgs e)
{
Form2 frm = new Form2(this);
frm.UpdateEventHandler += form2_UpdateEventHandler;
frm.ShowDialog();
}
然后假定从表格2插入数据
表格2:
//Form 2 constructor
public Form2(MainForm mainForm)
{
InitializeComponent();
}
public delegate void UpdateDelegate(object sender, UpdateEventArgs args);
public event UpdateDelegate UpdateEventHandler;
public class UpdateEventArgs : EventArgs
{
public string Data { get; set; }
}
protected void InsertData()
{
UpdateEventArgs args = new UpdateEventArgs();
UpdateEventHandler.Invoke(this, args);
}
private void btnInsertData_Click(object sender, EventArgs e)
{
SqlCommand cmd = new SqlCommand("SP_AddNewRow", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@param1", "Test1");
cmd.Parameters.AddWithValue("@param2", "Test2");
if (con.State == ConnectionState.Closed)
{
con.Open();
}
int n = cmd.ExecuteNonQuery();
con.Close();
if (n != 0)
{
//your codes if needed
InsertData();
}
}
希望这会有所帮助。