VS2005,C#,Windows应用程序
当用户用鼠标或方向键改变当前行位置时,我希望在改变前先判断另外2个DataGridView中的数据是否已被用户修改,如果修改了则弹出提示对话框,让用户选择是否保存数据,若用户选择“取消”则不保存并且不变换行位置,选择“是”或“否”则保存或不保存数据并允许选择至新行。
所以我希望有个行位置改变前的事件,以实现这种功能。但发现并没有这个事件,只有RowLeave和RowEnter事件,这2个都是发生后的事件,并不是发生前的事件。

解决方案 »

  1.   

    补充:
    DataGridView绑定了强类型BindingSource绑定源,BindingSource绑定源的PositionChanged事件实现当行位置改变时检索填充符合条件的数据至另2个DataGridView。
    PositionChanged事件也是发生后的事件,要是有个ing发生前的事件就好处理,可惜我一直没找到。
      

  2.   

    有一个databound事件可以开启一个检测。。
      

  3.   

    行位置:SelectionChanged 里面加响应函数比较好
    数据改变:CellValueChanged事件
    双剑鹤壁,应该没有问题吧?
      

  4.   

    你可以参考使用如下的事件:private void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
    {
    if (MessageBox.Show("aaa", "bbb", MessageBoxButtons.YesNo) == DialogResult.Yes)
    {
    e.Cancel = true;
    }
    }
      

  5.   

    “marquess”能不能说得详细一点?
      

  6.   

    应该是说各个事件都是光标离开,但是未进入新row的时候响应的,所以你可以在离开的时候判断,然后判断完了也许光标到新行了,但是可以再写函数回到原来行,rowselected就行吧,或者自己定义                System.Windows.Forms.SendKeys.Send("{up}");
      

  7.   

    我的Form界面是左边有一个DataGridView,右边是用户输入的详细资料(有许多的TextBox控件),右边详细数据是根据左边DataGridView中的当前行条件来检索填充。当用户在右边输入或修改了详细资料后,没有保存就点击了左边DataGridView中的其它行,所以弹出提示保存对话框,如果用户点击“是”或“否”则“保存”或“不保存”并允许选择至其它行,如果用户点击“取消”,则不保存也不允许选择至其它行,DataGridView必须从其它行回到原行位置,现在问题是选择了其它行后,即使点了“取消”也回不来原行位置。
      

  8.   

    只有想到记录上一次的RowIndex的方法,关注达人方法        private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
            {
                if (!dataGridView2.data_changed)
                {
                    lastrow = e.RowIndex;
                }
                else 
                {
                    MessageBox.Show("dataGridView2_datachanged……");
                    dataGridView1.ClearSelection();
                    dataGridView1.Rows[lastrow].Selected = true;
                }
            }
      

  9.   

    geniusatm4这种方式是不行的。如果用户用上下方向键或翻页键改变DataGridView行位置时怎么办呢?还有如果改变了绑定源BindingSource的Position值也会改变DataGridView的行位置,还有就是点工具栏的“第一条、上一条、下一条、最后条”时也会改变DataGridView的行位置。
    我知道如果用最笨的方法如:按键控制、鼠标控制、工具栏的“第一条、上一条、下一条、最后条”也控制、所有让Position值改变的地方都控制等,这样是可以实现这种功能,但这样实在太费周折了,也不科学不好维护,如果有上百个Form都要这样做,那就麻烦了。
    所以如果有个绑定源BindingSource的Position值改变前ing的事件那就好统一管理和控制了,允许则改变Position值,不允许则Position值保持不变,当然DataGridView的当前行也要保持不变。