不知道怎么获取Form2 中dataGridView中的所以数据, int id = int.Parse(this.dataGridViewProduct.SelectedRows[0].Cells[0].Value.ToString()); string name = this.dataGridViewProduct.SelectedRows[0].Cells[1].Value.ToString();这样只能获取到一行。 我想获取dataGridView中的所以数据。填充到Form1 dataGridView中。
实现窗体间的通讯主要有以下几种情况: 1. 单方向的 A. 主窗口向从窗口 B.从窗口向主窗口2. 双方向的 A.主从窗口的相互通信 在上述的几种情况中在单方向的情况中,主窗口向从窗口中比较容易理解也比较容易实现,可以看作是两个类之间的调用。由于从窗口接受的数据都是主窗口传送过来的是在从窗口显示之前都已经存在的比较直观!而两个窗口之间的相互通讯主要要决绝是从窗口向主窗口传值的问题。 下面就此情况给出自己常用的几种方式! 1.利用委托 a.第一步建立一个项目添加一 个Form命名为Addform 在mainform中添加一个listview 和菜单项 如下图: b.在AddForm中添加如下控件在mainForm中添加如下代码:using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms;namespace 窗体传值 { public partial class MainForm : Form { public MainForm() { InitializeComponent();
} private void 添加ToolStripMenuItem1_Click(object sender, EventArgs e) { AddForm1 addform = new AddForm1(); //实现委托的方法 addform.recorder = this.addItem; addform.Show(); }///添加listview private void addItem(string time,string things,string demo) { ListViewItem lv = new ListViewItem(time); lv.SubItems.Add(things); lv.SubItems.Add(demo); listView1.Items.Add(lv); }在AddForm中添加如下代码: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace 窗体传值 { public partial class AddForm1 : Form { /// <summary> /// 定义一个委托 /// </summary> /// <param name="time"></param> /// <param name="thing"></param> /// <param name="demo"></param> public delegate void AddInfo(string time, string thing, string demo);
public AddInfo recorder; private string time; private string thing; private string memo; public AddForm1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { time = this.dTPTime.Text.ToString(); thing = this.txtTask.Text.Trim(); memo = this.txtRe.Text; if (thing != "" && memo != "") { if (recorder != null) { ///调用委托实现主窗口的方法 recorder(time, thing, memo); } } else { MessageBox.Show("输入项不能有空!!"); } txtTask.Text = ""; txtRe.Text = ""; } private void AddForm1_Load(object sender, EventArgs e) { } } }2.委托和事件在解决方案中再添加一个窗体命名为AddForm2 在主窗口菜单项中加一个AddForm2的菜单选项 同时在主窗口中添加如下代码: private void 添加2ToolStripMenuItem_Click(object sender, EventArgs e) { AddForm2 addForm = new AddForm2(); addForm.buttSubmit += addItem; addForm.Show(); }在AddForm2中添加如下代码: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms;namespace 窗体传值 {
public partial class AddForm2 : Form { public delegate void AddItems(string times, string things, string demos); public event AddItems buttSubmit;//自定义事件 private string time; private string thing; private string demo; public AddForm2() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { time = dTPTime.Text; thing = txtTask.Text; demo = txtRe.Text; buttSubmit(time, thing, demo); } } }3.利用构造函数在解决方案中再添加一个窗体命名为AddForm3在主窗口菜单项中加一个AddForm3的菜单选项 同时在主窗口中添加如下代码: private void 添加3ToolStripMenuItem_Click(object sender, EventArgs e) { AddForm3 addForm = new AddForm3(listView1); addForm.Show();
}在AddFrom3.cs 中添加如下代码:using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; /// /// 方法3 /// 利用构造函数来进行由从到主的传递 /// 所有过程都是在字窗口实现 /// 在主窗口仅仅只有对AddForm3的调用 /// namespace 窗体传值 { public partial class AddForm3 : Form { private ListView _lvAdd; public AddForm3(ListView lvAdd) { InitializeComponent(); _lvAdd = lvAdd;
int id = int.Parse(this.dataGridViewProduct.SelectedRows[0].Cells[0].Value.ToString());
string name = this.dataGridViewProduct.SelectedRows[0].Cells[1].Value.ToString();这样只能获取到一行。
我想获取dataGridView中的所以数据。填充到Form1 dataGridView中。
传值的方法很多,楼上的说得很清楚了
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;namespace 窗体传值
{
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
} private void 添加ToolStripMenuItem1_Click(object sender, EventArgs e)
{
AddForm1 addform = new AddForm1();
//实现委托的方法
addform.recorder = this.addItem;
addform.Show();
}///添加listview
private void addItem(string time,string things,string demo)
{
ListViewItem lv = new ListViewItem(time);
lv.SubItems.Add(things);
lv.SubItems.Add(demo);
listView1.Items.Add(lv); }在AddForm中添加如下代码: using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace 窗体传值
{
public partial class AddForm1 : Form
{
/// <summary>
/// 定义一个委托
/// </summary>
/// <param name="time"></param>
/// <param name="thing"></param>
/// <param name="demo"></param>
public delegate void AddInfo(string time, string thing, string demo);
public AddInfo recorder; private string time;
private string thing;
private string memo; public AddForm1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
time = this.dTPTime.Text.ToString();
thing = this.txtTask.Text.Trim();
memo = this.txtRe.Text;
if (thing != "" && memo != "")
{
if (recorder != null)
{
///调用委托实现主窗口的方法
recorder(time, thing, memo);
} }
else
{
MessageBox.Show("输入项不能有空!!");
}
txtTask.Text = "";
txtRe.Text = ""; } private void AddForm1_Load(object sender, EventArgs e)
{ }
}
}2.委托和事件在解决方案中再添加一个窗体命名为AddForm2 在主窗口菜单项中加一个AddForm2的菜单选项 同时在主窗口中添加如下代码: private void 添加2ToolStripMenuItem_Click(object sender, EventArgs e)
{
AddForm2 addForm = new AddForm2();
addForm.buttSubmit += addItem; addForm.Show();
}在AddForm2中添加如下代码: using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;namespace 窗体传值
{
public partial class AddForm2 : Form
{
public delegate void AddItems(string times, string things, string demos);
public event AddItems buttSubmit;//自定义事件
private string time;
private string thing;
private string demo;
public AddForm2()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
time = dTPTime.Text;
thing = txtTask.Text;
demo = txtRe.Text;
buttSubmit(time, thing, demo);
} }
}3.利用构造函数在解决方案中再添加一个窗体命名为AddForm3在主窗口菜单项中加一个AddForm3的菜单选项 同时在主窗口中添加如下代码: private void 添加3ToolStripMenuItem_Click(object sender, EventArgs e)
{
AddForm3 addForm = new AddForm3(listView1);
addForm.Show();
}在AddFrom3.cs 中添加如下代码:using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
///
/// 方法3
/// 利用构造函数来进行由从到主的传递
/// 所有过程都是在字窗口实现
/// 在主窗口仅仅只有对AddForm3的调用
///
namespace 窗体传值
{
public partial class AddForm3 : Form
{ private ListView _lvAdd;
public AddForm3(ListView lvAdd)
{
InitializeComponent();
_lvAdd = lvAdd;
} private void button1_Click(object sender, EventArgs e)
{
ListViewItem lv = new ListViewItem(dTPTime.Text);
lv.SubItems.Add(txtTask.Text);
lv.SubItems.Add(txtRe.Text);
_lvAdd.Items.Add(lv);
} }
}
string name = this.dataGridViewProduct.SelectedRows[0].Cells[1].Value.ToString();这样只能获取到一行。
.......this.af.GetData(id,name,Unit,inMoney,number,allmoney);
我想获取的是所有的列,通过GetData方法把所有的数据传递到Form1 中的DataGridView 中
//利用委托实现,代码随手写的,没有编译过
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;namespace MyChangeData
{
public delegate void DataChangedHandler(DataTable dt)
public class ChangeReslut
{
public event DataChangedHandler DataChanged; public void ChangeData(DataTable dt)
{
if (DataChanged != null)
{
DataChanged(dt);
}
}
}
}//****************************************************************
using MyChangeData;
public Class Form2
{
添加构造函数
Public Form2(ChangeReslut r):this()
{
this.rs = r;
}
添加变量
private ChangeReslut rs button 单击事件
private void button_click()
{
DataTable data = dataGridView1.DataSource;
rs.ChangeData(data);
}
}//****************************************************************
using MyChangeData;
Public Class Form1
{
private void button_click()
{
ChangeReslut rs = new ChangeReslut();
rs.DataChanged += new DataChangedHandler(this.EventResultChanged);
Form2 frm= new Form2(rs);
frm.ShowDialog();
} private void EventResultChanged(DataTable dt)
{
this.dataGridView1.DataSource = dt;
}
}
传个DataTable进去
DataGridView dv=Application.OpenForms["Form1"].Controls["dataGridView1"];
if(dv!=null)
dv.DataSource=this.dataGridView.DataSource;不过你的确定Form1中dataGridView1的父容器,如果是其他,如:groupBox,则为:
Application.OpenForms["Form1"].Controls["groupBox1"].Controls["dataGridView1"]