当前位置: 代码迷 >> C# >> 选中datagridview某行点击按钮显示新窗口将该行的值显示在新窗口。该怎么解决
  详细解决方案

选中datagridview某行点击按钮显示新窗口将该行的值显示在新窗口。该怎么解决

热度:107   发布时间:2016-05-05 03:42:09.0
选中datagridview某行点击按钮显示新窗口将该行的值显示在新窗口。
如图所示,新人新手,望大家多指点在下!
------解决思路----------------------
Form detailForm = new DetailForm(this.dataGridView1);//将当前DataGridView直接传递为明细窗体


然后明细窗体里面就可以通过
var row = this.dataGridView1.CurrentRow;
var v = row.Cells[""].Value;//取相关值,并将值赋给相应输入框


另外可能可以通过BindingSource直接两个窗体联动,但没试验过
------解决思路----------------------
你可以在new新窗体前,将datagridview中的所有行列值传到新窗体中, 同时传一个行号(就是你点得那行),然后load新窗体时,去给textbox赋值。
------解决思路----------------------
定义一个类比如:
public  class BasicDocument
{
//部门编码
   public static  string  DepartMentCode;
 .........
//部门名称
    public static  string  DepartMentName;

}
//部门档案界面
这个写在grid单击事件中
int index = dg_Product.CurrentRow.Index;    //取得选中行的索引  
BasicDocument.DepartMentCode= dg_Product.Rows[index].Cells["name"].Value; 
//编辑界面
//这个写在load事件中
txt_depart.text=BasicDocument.DepartMentCode;





------解决思路----------------------
这是窗体间 传值问题,参考http://bbs.csdn.net/topics/390128592
------解决思路----------------------
引用:
Form detailForm = new DetailForm(this.dataGridView1);//将当前DataGridView直接传递为明细窗体


然后明细窗体里面就可以通过
var row = this.dataGridView1.CurrentRow;
var v = row.Cells[""].Value;//取相关值,并将值赋给相应输入框


另外可能可以通过BindingSource直接两个窗体联动,但没试验过

方法有很多了,1楼说的是其中一种方法;其实dataGridView和新窗体就是两个对象嘛,两个对象之间传值,是可以有很多实现的。1楼的够用了。
------解决思路----------------------
BindingSource我已经测试过可行

------解决思路----------------------
public class TestClass
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public string Desc { get; set; }
    }

Form2的代码

BindingSource bs;
private void Form2_Load(object sender, EventArgs e)
        {

            List<TestClass> list = new List<TestClass>()
            {
                new TestClass{ ID=1,Name="Name1"},
                new TestClass{ ID=2,Name="Name2",Desc="Desc2"},
            };
            bs = new BindingSource();
            bs.DataSource = list;
            this.dataGridView1.DataSource = bs;
        }

        private void btnDetail_Click(object sender, EventArgs e)
        {
            Form3 frm = new Form3(bs);
            frm.Show();
        }

Form3的代码
BindingSource bs;
        public Form3(BindingSource bs)
        {
            this.bs = bs;
            InitializeComponent();
        }


        private void btnNext_Click(object sender, EventArgs e)
        {
            bs.MoveNext();
        }

        private void Form3_Load(object sender, EventArgs e)
        {
            this.txtName.DataBindings.Add("Text", bs, "Name");
            this.txtDesc.DataBindings.Add("Text", bs, "Desc");
        }

        private void btnPrev_Click(object sender, EventArgs e)
        {
            bs.MovePrevious();
        }

------解决思路----------------------
引用:
Quote: 引用:

Form detailForm = new DetailForm(this.dataGridView1);//将当前DataGridView直接传递为明细窗体


然后明细窗体里面就可以通过
var row = this.dataGridView1.CurrentRow;
var v = row.Cells[""].Value;//取相关值,并将值赋给相应输入框


另外可能可以通过BindingSource直接两个窗体联动,但没试验过

本人是新手。。。问的问题你不要生气啊。。。


为啥这样了呢?另外你说的“BindingSource”方法能给我代码 我自己看看么?


……我不是在上面已经回了BindingSource的了吗,有截图有代码啊
------解决思路----------------------
构造函数部分我也是有的,你那个是因为没改默认的构造函数
  相关解决方案