日期:2014-05-18  浏览次数:20977 次

WinForm中datagridview问题. 同样的 this.dataGridView1.BeginEdit(false); 在按键事件和Form_load事件中执行的效果却不一样.为什么?
重新开帖问:
代码:
 
C# code
private void button1_Click(object sender, EventArgs e)
        {
            this.dataGridView1.BeginEdit(false);          }

        private void Form1_Load_1(object sender, EventArgs e)
        {
          
            this.dataGridView1.Rows.Add(4); //随便添加四行.
            this.dataGridView1.BeginEdit(false);
        }


参见上一贴:http://http://topic.csdn.net/u/20080530/11/ff4ea6e5-a342-47d5-8ffd-b3101bfd0b30.html

用button1_Click, datagridview可以进入编辑状态, 而在Form1_Load里却不能直接进入编辑状态. 为什么?
我已将问题简化,Form只有一个button和datagridview. dataGridView也只随便添加了一个文本列.

------解决方案--------------------
C# code

protected override void OnShown(EventArgs e)
{
    dgvDatabase.Rows.Add(4);
    dgvDatabase.BeginEdit(false);
    base.OnShown(e);
}

------解决方案--------------------
应该是焦点问题,当load事件结束后,form还有个show事件,会将焦点重新获取,所以当你把焦点移到grid上后,应该是直接可以编辑的。。。。
或者你在show中写this.dataGridView1.Rows.Add(4); //随便添加四行.
this.dataGridView1.BeginEdit(false);
试试看
------解决方案--------------------
友情帮顶!!
------解决方案--------------------
帮顶
------解决方案--------------------
第一: Form1_Load_1中的时候窗口还没有显示出来,而Form1_Load_1中的this.dataGridView1.BeginEdit(false);
使得GridView进入了编辑状态,但内嵌编辑窗口却显示不出来(父窗口还没显示呢)。随后,又没有办法通过失去焦点来EndEdit()。

你可以这样模拟这个错误:
设dataGridView1的tabIndex为1,而按键的tabIndex为0(这样dataGridView就不会获得默认的焦点),你会发现你代码中连button1_Click都不好使了!

第二:问题可以这样解决,不在Form_Load而在第一次显示窗口(Form_Shown)中来让dataGridView进入编辑状态。
请参考以下代码:

C# code

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            this.dataGridView1.Rows.Add(4); //随便添加四行.

             this.Shown += delegate { this.dataGridView1.BeginEdit(false); };     //<---
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.dataGridView1.BeginEdit(false);
        }
    }

------解决方案--------------------
测试5楼代码时,请记得去掉Form1_Load_1(object sender, EventArgs e)相关代码。
就是5楼讲的不能有BeginEdit,否则没有配对的EndEdit

------解决方案--------------------
路过UP


同意楼上的意见!
------解决方案--------------------
C# code
private void Form1_Load_1(object sender, EventArgs e)
        {
            this.dataGridView1.Select();//加上这一句激活控件应该OK了
            this.dataGridView1.Rows.Add(4); //随便添加四行.
              this.dataGridView1.BeginEdit(false);
        }

------解决方案--------------------
up
------解决方案--------------------
Form1_Load
先 Me.Show()
Me.Activate()
------解决方案--------------------
顶,同意5楼意见
------解决方案--------------------
你在MSDN里查下BeginEdit这个方法的解释就知道了。一定要当前单元格不为空,这个方法才会起作用。
------解决方案--------------------
up