似乎是个久远的问题,但是本人是刚刚开始做winform(c#)项目,希望大家多多指点。 问题如下:
有两个窗体form1和form2
form1中有个dataGridView1和一个选择按钮button 但是开始的时候dataGridView1中是没有数据的
form2中也有个dataGridView1控件 dataGridView1中有数据
现在当单击form1中选择按钮的时候可以弹出form2窗体,单击form2窗体中的dataGridView1的任意一行可以取到该行数据对应的ID(已经实现) 现在的问题就是我如何根据这个id 把数据库中对应的记录绑定到form1的dataGridView1中 如果多次选择,就要把这几次选择的数据都绑定到form1中的dataGridView1中。
说的比较长 ,不知道描述清楚没有。
若有其他方法可以实现 不用dataGridView也行。
有两个窗体form1和form2
form1中有个dataGridView1和一个选择按钮button 但是开始的时候dataGridView1中是没有数据的
form2中也有个dataGridView1控件 dataGridView1中有数据
现在当单击form1中选择按钮的时候可以弹出form2窗体,单击form2窗体中的dataGridView1的任意一行可以取到该行数据对应的ID(已经实现) 现在的问题就是我如何根据这个id 把数据库中对应的记录绑定到form1的dataGridView1中 如果多次选择,就要把这几次选择的数据都绑定到form1中的dataGridView1中。
说的比较长 ,不知道描述清楚没有。
若有其他方法可以实现 不用dataGridView也行。
选择一条后就会关闭form2 想选择多条 就让他多次选择就行 这个我已经实现 就是不知道如何把值传回去 并绑定到form1的dataGridView中.
public class form2
{public chooseIDDelegate chooseIDInstance;.....Gridview的choose事件中调用
chooseIDInstance(id);}
class form1
{
.....Gridview的choose事件中调用
form2 f=new form2();
f+=new chooseIDDelegate(chooseID_event);
}public void chooseID_event(string ID)
{
针对得到的ID进行处理
}
如果你用Form2.ShowDialog()的话,直接在Form2公开个属性,让Form1能访问到就可以了。Sample如下:
Form1:
#
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
f2.ShowDialog();
// 从Form2里定义了SelectedIds属性,在ShowDialog之后取得
DataTable data = new DataTable();
data.Columns.Add("Id");
f2.SelectedIds.ForEach(x => data.Rows.Add(new[] { x }));
this.dataGridView1.DataSource = data;
}
}
Form2:
#public partial class Form2 : Form
{
//公开属性,只能get,不能在Form2以外进行set。
public List<string> SelectedIds
{ get; private set; } public Form2()
{
InitializeComponent();
} private void Form2_Load(object sender, EventArgs e)
{
var data = new DataTable();
data.Columns.Add("Id");
data.Columns.Add("Name"); data.Rows.Add(new[] { "001", "Test1" });
data.Rows.Add(new[] { "002", "Test2" });
data.Rows.Add(new[] { "003", "Test3" });
data.Rows.Add(new[] { "004", "Test4" });
data.Rows.Add(new[] { "005", "Test5" }); this.dataGridView1.DataSource = data; this.dataGridView1.AllowUserToAddRows = false;
this.dataGridView1.MultiSelect = true;
this.dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
} private void button1_Click(object sender, EventArgs e)
{
SelectedIds = new List<string>();
foreach (DataGridViewRow row in this.dataGridView1.SelectedRows)
SelectedIds.Add(row.Cells[0].Value.ToString());
this.Close();
}
}
通过公共静态类进行传值;
通过绑定事件进行传值;
使用Attribute
public partial class Form1 : Form
{
private void button1_Click(object sender, EventArgs e)
{
Form2 frm2 = new Form2();
frm2.Show(this);
}
} public partial class Form2 : Form
{
private void button1_Click(object sender, EventArgs e)
{
Form1 frm1 = (Form1)this.Owner;
((TextBox)frm1.Controls["textBox1"]).Text = this.textBox2.Text;
this.Close();
}
}
form1中定义属性List<T> 在form2操作list
循环查询获取datagridviewp
rivate void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{}
form2 dialog=new form2();
if (dialog.ShowDialog() == DialogResult.OK)
{
DataTable dt=dialog.dt;
}form2中
DataTable dt;//全局变量
public partial class Form1 : Form
{
private void button1_Click(object sender, EventArgs e)
{
Form2 frm2 = new Form2();
frm2.Show(this);
}
} public partial class Form2 : Form
{
private void button1_Click(object sender, EventArgs e)
{
Form1 frm1 = (Form1)this.Owner;
((TextBox)frm1.Controls["textBox1"]).Text = this.textBox2.Text;
this.Close();
}
}