我想实现这个功能:1)有一个DataViewGrid,其中已经有很多数据了(假设有10行、10列);
2)当鼠标双击某个单元格时(比如双击了第3行、第4列、单元格里放的是整数123),就跳出一个(可以用Form.Show())窗口,并将刚刚那个单元格的值(整数123)赋给新窗口的TextBox;
3)修改新窗口中的TextBox中的值(当前是整数123)后,能将修改的新值(比如是整数345)再赋给刚刚原窗口的那个单元格,将其更新(由整数123更新为整数345);
注:鼠标双击DataViewGrid的行头和列头时,不触发“弹出窗口”的事件;请问这怎么实现呢?尽量请给代码 谢谢了

解决方案 »

  1.   

    Form2的textbox的 modifers属性设置为public            Form2 frm = new Form2();
                frm.textBox8.Text = this.dataGridView1.CurrentCell.Value.ToString();
                if (frm.ShowDialog() == DialogResult.OK)
                {
                    this.dataGridView1.CurrentCell.Value = frm.textBox8.Text;
                }
      

  2.   

      private void dgvList_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
            {
                    if (e.RowIndex >= 0)
                    {
                 TextBox.Text=dataGridView1.SelectedRows[0].Cells[3].Value.ToString();
                     }
    else
    {
     TextBox.Text="";
    }
              }     private void button1_Click(object sender, EventArgs e)
            {
    if(dataGridView1.SelectedRows!=null)
    dataGridView1.SelectedRows[0].Cells[3].Value=TextBox.Text;
    }
      

  3.   

    两位高手你们好:我是这么做的,如下首先,有两个窗口:Form1(有一个dataGridView1)、Form2(有一个textBox1和一个button1)
    注:这个dataGridView1里面已经通过绑定的Access数据库在窗口初始化的时候将它赋值了,共有5行、5列,内容全部为123;然后:将dataGridView1、textBox1的modifers属性设置为public最后,我在Form1里写:
            private void dataGridView1_CellMouseDown(object sender, DataGridViewCellEventArgs e)
            {
                Form2 frm = new Form2();
                frm.textBox1.Text = dataGridView1.SelectedRows[1].Cells[1].Value.ToString();
                if (frm.ShowDialog() == DialogResult.OK)
                {
                    this.dataGridView1.CurrentCell.Value = frm.textBox1.Text;
                }
            }
        我在Form2里写:
            private void button1_Click(object sender, EventArgs e)
            {
                Form1 frm = new Form1();
                frm.dataGridView1.SelectedRows[1].Cells[1].Value = textBox1.Text;
            }然后编译通过,运行程序,发现有2个问题(具体体现为不符合要求):
    问题1:在通过鼠标双击表格单元格时,基本根本不会触发事件(确实会触发,但基本上是双击30次,才会出现一次),几率非常小,我不知道是为什么?
    问题2:当触发事件后,不会正常的跳出窗口,而是爆出一个错误:“索引超出范围。必须为非负值并小于集合大小。   参数名: index”,该错误出现在Form1窗口下的“frm.textBox1.Text ”行;请问上述情况是为什么呢???
    恳求解答了!
      

  4.   

    private void dataGridView1_CellMouseDown(object sender, DataGridViewCellEventArgs e),这一句的事件有问题吧,你仔细盾下2楼的,然第二个问题是虽然你击发了这一事件上,dataGridView1.SelectedRows[1].Cells[1].Value.ToString();可取到的索引非这一句要取的索引所以就出错了。那红色字的改下就行了。
      

  5.   

    e.RowIndex >= 0
    需要判断是否单击的是表头
      

  6.   

    e.RowIndex >= 0
    需要判断是否单击的是表头
      

  7.   


    你new 一个是不行的,,当然会报那个错,,不能new
    form1中
                Form2 frm = new Form2();
                frm.textBox8.Text = this.dataGridView1.CurrentCell.Value.ToString();
                if (frm.ShowDialog() == DialogResult.OK)
                {
                    this.dataGridView1.CurrentCell.Value = frm.txt;
                }  我在Form2里写:
    public string txt;
      private void button1_Click(object sender, EventArgs e)
      {
    txt=TextBox1.Text;
     this.ShowDialog() == DialogResult.OK;
     = textBox1.Text;
      }
      

  8.   

    我的思路:
    把form1的datagridview设置成public,在窗口form2的load中把读取form1的datagridview值到相应控件上;在form2把数据保存到数据库中,在form1只需要刷新下就可以完成你想要的结果