100分求教一datagrid的难题!找遍了所以的地方也没找到类似的问题!

时间:2022-01-20 10:01:24
1、为什么我把table的AllowNew属性设成false以后在只有
   一行的情况下表里面的Expression就没用了呢好像Expression
   必须在换行后才能起作用可当只有一行而且AllowNew设
   置成false以后按回车就不能自动换行了。Expression
   也不起作用了怎么办呢?当我把焦点离开datagrid时候
   Expression到可以起作用,但是我需要的是不离开此行
   怎么使Expression起作用。

   简单的说就使输入完某一单元格后,焦点在不离开此行的
   情况下使Expression起作用。

2、我想输入完后,按回车能跳转到此行的某一列(不是下一
   列)。

16 个解决方案

#1


http://www.syncfusion.com/FAQ/WinForms/default.asp#44

#2


这上面得问题我都看过了。没有我说得问题呀

#3


你的问题我以前也遇到过,也不知道怎么解决,需要你更改列的样式,或者直接继承定义一个新列样式

#4


在离开编辑控件(如datagrid)时加上处理语句。如:bm.endcurrentedit()

#5


我要的效果是
不离开datagrid的时候怎么触发呢?
而且datagrid只有一行,不能添加新行的情况下!

#6


问题这么难 
几天了在微软新闻组和这里都得不到答案!
唉!怎么揭帖呀!

我都出了100分求这个问题了!两个帖子都结不了

#7


自己写一个控件,继承自现有的Datagrid控件,再重写处理命令键响应程序ProcessCmdKey,来实现对enter键的调到同行其他列的功能。
vb.net做法如下,仅供参考.(不是原著,学习别人的而已)
步骤一:在vs.net编辑器中,“文件”->“新建”->“项目”,然后选择新建一个“Windows控件库”的项目:HenryDatagrid。这样运行的结果会生成一个DLL文件,而不是EXE执行文件;

步骤二:在HenryDatagrid.vb文件代码编辑窗口中加入有阴影的这句话:

Public Class HenryDatagrid

Inherits System.Windows.Forms.DataGrid   ‘这表示新建的控件是Datagrid的派生控件

步骤三:在“类名”窗口中选择overrides,然后在“方法名称”窗口选择“ProcessCmdKey"

然后就会出现一段空的ProcessCmdKey代码段,我们可以写入自己的代码:

Protected Overrides Function ProcessCmdKey(ByRef msg As System.Windows.Forms.Message,  ByVal keyData As System.Windows.Forms.Keys) As Boolean

        Dim WM_KEYDOWN As Integer = 256  ‘消息响应的问题可以参考其他win32编程的文章

        Dim WM_SYSKEYDOWN As Integer = 260 

        If ((msg.Msg = WM_KEYDOWN) Or (msg.Msg = WM_SYSKEYDOWN)) Then

            Select Case keyData

                Case Keys.Down   

                    MsgBox("截到下箭头键")

                    Return True

                Case Keys.Up

                    MsgBox("截到上箭头键")

                    Return True

                Case Keys.Enter

                    SendKeys.Send("{Tab}")

                    Return True

                Case Keys.Control + Keys.M

                    MsgBox("<CTRL> + m 组合键被截获")

                    Return True

                Case Keys.Alt + Keys.Z

                    MsgBox("<ALT> + z 组合键被截获")

                    Return True

            End Select

        End If

 End Function

  然后运行一下,生成HenryDatagrid.dll文件

步骤四:再建立一个项目,然后在新项目的设计窗口的工具箱上单击鼠标右键,在弹出菜单中选择“添加引用”,然后在.net选项卡中占击“浏览”,选择到HenryDatagrid.dll,加入进来,然后您的工具箱上会多出一个HenryDatagrid的图标,在新项目中使用HenryDatagrid来代替datagrid控件。看一下,您所需要的“Enter跳格”事件就这样完成了。

#8


第一个问题怎么解决

#9


我也碰到过这样的问题,头疼。

#10


欢迎大家up


up者有分

#11


up的好

#12


主要是第一个问题怎么解决?

用CurrentCellChanged 这个事件自己计算好像能解决

#13


关注一下

#14


up..........
up...........
up...........

#15


等了n天都没回答!当散分算了!

#16


up up up !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

#1


http://www.syncfusion.com/FAQ/WinForms/default.asp#44

#2


这上面得问题我都看过了。没有我说得问题呀

#3


你的问题我以前也遇到过,也不知道怎么解决,需要你更改列的样式,或者直接继承定义一个新列样式

#4


在离开编辑控件(如datagrid)时加上处理语句。如:bm.endcurrentedit()

#5


我要的效果是
不离开datagrid的时候怎么触发呢?
而且datagrid只有一行,不能添加新行的情况下!

#6


问题这么难 
几天了在微软新闻组和这里都得不到答案!
唉!怎么揭帖呀!

我都出了100分求这个问题了!两个帖子都结不了

#7


自己写一个控件,继承自现有的Datagrid控件,再重写处理命令键响应程序ProcessCmdKey,来实现对enter键的调到同行其他列的功能。
vb.net做法如下,仅供参考.(不是原著,学习别人的而已)
步骤一:在vs.net编辑器中,“文件”->“新建”->“项目”,然后选择新建一个“Windows控件库”的项目:HenryDatagrid。这样运行的结果会生成一个DLL文件,而不是EXE执行文件;

步骤二:在HenryDatagrid.vb文件代码编辑窗口中加入有阴影的这句话:

Public Class HenryDatagrid

Inherits System.Windows.Forms.DataGrid   ‘这表示新建的控件是Datagrid的派生控件

步骤三:在“类名”窗口中选择overrides,然后在“方法名称”窗口选择“ProcessCmdKey"

然后就会出现一段空的ProcessCmdKey代码段,我们可以写入自己的代码:

Protected Overrides Function ProcessCmdKey(ByRef msg As System.Windows.Forms.Message,  ByVal keyData As System.Windows.Forms.Keys) As Boolean

        Dim WM_KEYDOWN As Integer = 256  ‘消息响应的问题可以参考其他win32编程的文章

        Dim WM_SYSKEYDOWN As Integer = 260 

        If ((msg.Msg = WM_KEYDOWN) Or (msg.Msg = WM_SYSKEYDOWN)) Then

            Select Case keyData

                Case Keys.Down   

                    MsgBox("截到下箭头键")

                    Return True

                Case Keys.Up

                    MsgBox("截到上箭头键")

                    Return True

                Case Keys.Enter

                    SendKeys.Send("{Tab}")

                    Return True

                Case Keys.Control + Keys.M

                    MsgBox("<CTRL> + m 组合键被截获")

                    Return True

                Case Keys.Alt + Keys.Z

                    MsgBox("<ALT> + z 组合键被截获")

                    Return True

            End Select

        End If

 End Function

  然后运行一下,生成HenryDatagrid.dll文件

步骤四:再建立一个项目,然后在新项目的设计窗口的工具箱上单击鼠标右键,在弹出菜单中选择“添加引用”,然后在.net选项卡中占击“浏览”,选择到HenryDatagrid.dll,加入进来,然后您的工具箱上会多出一个HenryDatagrid的图标,在新项目中使用HenryDatagrid来代替datagrid控件。看一下,您所需要的“Enter跳格”事件就这样完成了。

#8


第一个问题怎么解决

#9


我也碰到过这样的问题,头疼。

#10


欢迎大家up


up者有分

#11


up的好

#12


主要是第一个问题怎么解决?

用CurrentCellChanged 这个事件自己计算好像能解决

#13


关注一下

#14


up..........
up...........
up...........

#15


等了n天都没回答!当散分算了!

#16


up up up !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!