C# winfrom datagridview 子父窗口传值问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# winfrom datagridview 子父窗口传值问题相关的知识,希望对你有一定的参考价值。
现在有这么一个情况:
两个窗口分别有一个datagridview,要在父窗体中双击datagridview1一列弹出子窗体,在弹出的子窗体中双击datagridview2的一列赋值给刚才父窗体中datagridview1所双击的那列....
说昏了,值得到了...就是不知道怎么回传给父窗体!菜鸟求助~~~~
你可以把父窗口自已传过去,在子窗口方便操作。
Form2 form2= new Form2(this);//实例化一个Form2窗口并把自己传过去
form2.ShowDialog();
在子窗口就可以直接改化变父窗口的值。
另外一种就是用变量在两个窗体之间传值,下面有一个例子,网上找了,希望对你有所帮助。
Form1中代码:
public Form1()
InitializeComponent();
private void button1_Click(object sender, EventArgs e)
Form2 lForm = new Form2();//实例化一个Form2窗口
lForm.String1 = "传值给子窗口Form2成功";//设置Form2中string1的值
lForm.SetValue();//设置Form2中Label1的
lForm.ShowDialog();
Form2中代码:
private string string1;
public string String1
set
string1 = value;
public void SetValue()
this.label1.Text = string1;
public Form2()
InitializeComponent();
2、子窗口返回值给父窗口
Form1中代码:
public Form1()
InitializeComponent();
private string strValue;
public string StrValue
set
strValue = value;
private void btnShowForm2_Click(object sender, EventArgs e)
Form2 lForm = new Form2();
lForm.Owner = this;//重要的一步,主要是使Form2的Owner指针指向Form1
lForm.ShowDialog();
MessageBox.Show(strValue);//显示返回的值
From2中代码:
public Form2()
InitializeComponent();
private void btnClose_Click(object sender, EventArgs e)
Form1 lForm1 = (Form1)this.Owner;//把Form2的父窗口指针赋给lForm1
lForm1.StrValue = "子窗口Form2返回数值成功";//使用父窗口指针赋值
this.Close();
参考技术A 子窗体写一个Form的对象或者就写父窗体datagridview的对象,在子窗体写一个带参的构造函数!把父窗体对象传过去。就可以随意找了。 参考技术B 父窗口的datagridview1在第designer.cs里改为public的,子窗口写个构造函数,
class ChildForm : Form
FatherForm father
public ChildForm(FatherForm father)
:this()
this.father = father;
public void 传值()
father.datagridview1.XXXX = XXXXX;
winfrom datagridview中DataGridViewTextBoxColumn的联动处理
这个问题有两种方法 第一种是用DataGridview中自带的DataGridViewTextBoxColumn 控件,第二种是动态添加combobox控件 方法一: 首先 窗体上拖拽一个 DataGridview 然后在这个DataGridview中添加两列DataGridViewTextBoxColumn (第一列叫A,第二列叫B) 然后绑定A代码 A.DataSource = ds.Tables[0].DefaultView; A.DisplayMember = "table_name"; A.ValueMember = "table_name"; ((DataGridViewComboBoxColumn)dataGridView1.Columns[0]).DefaultCellStyle.NullValue = "--请选择--"; //默认值 其次是绑定B代码 //当前选中行的第二列赋值 ((DataGridViewComboBoxCell)dataGridView1.Rows[dataGridView1.CurrentCell.RowIndex].Cells[1]).DataSource = ds.Tables[0].DefaultView; ((DataGridViewComboBoxCell)dataGridView1.Rows[dataGridView1.CurrentCell.RowIndex].Cells[1]).DisplayMember = "comments"; ((DataGridViewComboBoxCell)dataGridView1.Rows[dataGridView1.CurrentCell.RowIndex].Cells[1]).ValueMember = "column_name"; ((DataGridViewComboBoxColumn)dataGridView1.Columns[2]).DefaultCellStyle.NullValue = "--请选择--"; 然后添加SelectedIndexChanged事件代码 private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) { DataGridView dgv = (DataGridView)sender; if (dgv.CurrentCell.OwningColumn.Name == "A") { ComboBox cb = (ComboBox)e.Control; cb.SelectedIndexChanged += new EventHandler(comboBox_SelectedIndexChanged); } } SelectedIndexChanged事件代码 public void comboBox_SelectedIndexChanged(object sender, EventArgs e) { ComboBox comboBox = (ComboBox)sender; if (dataGridView1.CurrentCell.OwningColumn.Name == "表名") { if (comboBox.Text != "") { //这是绑定B的方法 DBFieldNote(comboBox.Text); } } } 方法二: 首先实例化combobox对象 private ComboBox comboBox = new ComboBox(); private ComboBox cb = new ComboBox(); 其次: this.dataGridView1.Controls.Add(comboBox);//将控件添加到DataGridview中 DBTableName();//绑定comboBox comboBox.Visible = false; comboBox.SelectedIndexChanged += new EventHandler(comboBox_SelectedIndexChanged);//添加事件 private void comboBox_SelectedIndexChanged(object sender, EventArgs e) { string name = ((ComboBox)sender).Text; dataGridView1.CurrentCell.Value = name;//将选中的值添加到DataGridview当前选中的单元格里 DBFieldNote(name);//绑定第二个combobox(也就是cb) } public void DBFieldNote(string tablename) { this.dataGridView1.Controls.Add(cb); cb.Visible = false; cb.SelectedIndexChanged += new EventHandler(cb_SelectedIndexChanged); ...... } private void cb_SelectedIndexChanged(object sender, EventArgs e) { dataGridView1.CurrentCell.Value = cb.Text; } private void dataGridView1_CurrentCellChanged(object sender, EventArgs e) { if (dataGridView1.CurrentCell != null) { if (dataGridView1.CurrentCell.ColumnIndex == 1)//如果选中的是第一列 就显示第一个combobox { System.Drawing.Rectangle rect = dataGridView1.GetCellDisplayRectangle(dataGridView1.CurrentCell.ColumnIndex, dataGridView1.CurrentCell.RowIndex ,false);//获取当前选中的单元格的属性(宽 ,高等) comboBox.Left = rect.Left; comboBox.Top = rect.Top; comboBox.Width = rect.Width; comboBox.Height = rect.Height; comboBox.Visible = true; } else if (dataGridView1.CurrentCell.ColumnIndex==2)//如果是选中第二列就显示cb { System.Drawing.Rectangle rect1 = dataGridView1.GetCellDisplayRectangle(comboxIndex + 1, dataGridView1.CurrentCell.RowIndex, false); cb.Left = rect1.Left; cb.Top = rect1.Top; cb.Width = rect1.Width; cb.Height = rect1.Height; cb.Visible = true; } } else { comboBox.Visible = false; } }
以上是关于C# winfrom datagridview 子父窗口传值问题的主要内容,如果未能解决你的问题,请参考以下文章
C# winfrom datagridview 怎样实现 如图效果 程序动态添加数据呢?
C# Winfrom 获取DataGridview自动生成序号的值