好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

winform中主窗口Form1通过子窗口Form2的点击事件改变主窗口中dataGridViewO

winform中主窗口Form1通过子窗口Form2的点击事件改变主窗口中dataGridViewOne中的内容展示

在WinForm中实现子窗口Form2通过点击事件修改主窗口Form1的DataGridView数据,可通过以下步骤完成:

?1、主窗口(Form1)暴露公共方法?

在Form1中创建用于更新DataGridView的方法:

public void UpdateDataGridView(DataTable data)

{

    dataGridViewOne.DataSource = data; // 直接绑定新数据源

    dataGridViewOne.Refresh();         // 强制刷新显示

}

2、?子窗口(Form2)传递事件?

在Form2中添加点击事件,并通过构造函数或属性获取Form1的引用:

private Form1 _mainForm;

public Form2(Form1 mainForm) // 通过构造函数传递主窗体引用

{

    _mainForm = mainForm;

    InitializeComponent();

}

private void buttonApply_Click(object sender, EventArgs e)

{

    DataTable newData = GenerateNewData(); // 生成需要显示的新数据

    _mainForm.UpdateDataGridView(newData); // 调用主窗体更新方法

    this.Close();

}

?3、主窗口打开子窗口时传递自身引用?

在Form1中打开Form2的代码:

private void buttonOpenForm2_Click(object sender, EventArgs e)

{

    Form2 childForm = new Form2(this); // 将当前Form1实例传递给Form2

    childForm.ShowDialog();

}

?替代方案(使用事件委托)?若需解耦窗体关系,可采用事件机制:

// 在Form2中定义事件

public event Action<DataTable> DataUpdated; 

private void buttonApply_Click(object sender, EventArgs e)

{

    DataUpdated?.Invoke(GenerateNewData()); // 触发事件

}

// Form1中订阅事件

Form2 childForm = new Form2();

childForm.DataUpdated += (data) => dataGridViewOne.DataSource = data;

childForm.Show();

?注意事项?

避免直接操作dataGridViewOne.Rows集合,推荐使用数据源绑定模式(如DataTable/BindingList)

若跨线程操作UI控件,需通过Control.Invoke调用

复杂数据更新建议使用MVVM模式(如BindingSource组件)


查看更多关于winform中主窗口Form1通过子窗口Form2的点击事件改变主窗口中dataGridViewO的详细内容...

  阅读:10次