我想实现这个功能:1)有一个DataViewGrid,其中已经有很多数据了(假设有10行、10列);
2)当鼠标双击某个单元格时(比如双击了第3行、第4列、单元格里放的是整数123),就跳出一个(可以用Form.Show())窗口,并将刚刚那个单元格的值(整数123)赋给新窗口的TextBox;
3)修改新窗口中的TextBox中的值(当前是整数123)后,能将修改的新值(比如是整数345)再赋给刚刚原窗口的那个单元格,将其更新(由整数123更新为整数345);
注:鼠标双击DataViewGrid的行头和列头时,不触发“弹出窗口”的事件;请问这怎么实现呢?尽量请给代码 谢谢了
2)当鼠标双击某个单元格时(比如双击了第3行、第4列、单元格里放的是整数123),就跳出一个(可以用Form.Show())窗口,并将刚刚那个单元格的值(整数123)赋给新窗口的TextBox;
3)修改新窗口中的TextBox中的值(当前是整数123)后,能将修改的新值(比如是整数345)再赋给刚刚原窗口的那个单元格,将其更新(由整数123更新为整数345);
注:鼠标双击DataViewGrid的行头和列头时,不触发“弹出窗口”的事件;请问这怎么实现呢?尽量请给代码 谢谢了
frm.textBox8.Text = this.dataGridView1.CurrentCell.Value.ToString();
if (frm.ShowDialog() == DialogResult.OK)
{
this.dataGridView1.CurrentCell.Value = frm.textBox8.Text;
}
{
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;
}
注:这个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 ”行;请问上述情况是为什么呢???
恳求解答了!
需要判断是否单击的是表头
需要判断是否单击的是表头
你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;
}
把form1的datagridview设置成public,在窗口form2的load中把读取form1的datagridview值到相应控件上;在form2把数据保存到数据库中,在form1只需要刷新下就可以完成你想要的结果