首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

按TAB键时,绕过DataGridView中的只读单元格

在 DataGridView 中,当按下 TAB 键时,如果遇到只读单元格,可以通过修改 DataGridView 的选择模式来实现绕过只读单元格的功能。以下是一种实现方法:

  1. 首先,在 DataGridView 的属性中,将 SelectionMode 设置为 CellSelect。
  2. 然后,在 DataGridView 的 KeyDown 事件中,添加以下代码:
代码语言:csharp
复制
private void dataGridView1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Tab)
    {
        int currentRowIndex = dataGridView1.CurrentCell.RowIndex;
        int currentColumnIndex = dataGridView1.CurrentCell.ColumnIndex;

        bool isReadOnly = dataGridView1.Rows[currentRowIndex].Cells[currentColumnIndex].ReadOnly;

        if (isReadOnly)
        {
            if (e.Shift)
            {
                // 向前移动
                for (int i = currentColumnIndex - 1; i >= 0; i--)
                {
                    if (!dataGridView1.Rows[currentRowIndex].Cells[i].ReadOnly)
                    {
                        dataGridView1.CurrentCell = dataGridView1.Rows[currentRowIndex].Cells[i];
                        break;
                    }
                }
            }
            else
            {
                // 向后移动
                for (int i = currentColumnIndex + 1; i< dataGridView1.Columns.Count; i++)
                {
                    if (!dataGridView1.Rows[currentRowIndex].Cells[i].ReadOnly)
                    {
                        dataGridView1.CurrentCell = dataGridView1.Rows[currentRowIndex].Cells[i];
                        break;
                    }
                }
            }
        }
    }
}

这段代码的作用是,当按下 TAB 键时,如果当前单元格是只读的,则会自动跳过该单元格,选择下一个可编辑的单元格。如果按下 Shift + TAB 键,则会向前移动到上一个可编辑的单元格。

通过这种方式,可以实现在 DataGridView 中按下 TAB 键时,绕过只读单元格的功能。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Excel催化剂开源第23波-VSTO开发辅助录入功能关键技术

自定义控件,可直接用到工作表单元格 具体实现原理 通过用户配置操作,将需要进行快速录入区域记录下来,用SelectionChange事件来响应,若用户选择到这些单元格,就激发事件方法,显示自定义控件...输入过程动态控制下方DataGridView查找结果,用户可以方向箭下上在结果中选择对应条目,再按Enter或Tab确定内容录入。...和Tab功能,默认为窗体退出和TabIndex跳转,这里有个对一个方法进行重写即可。...KeyDown事件,例如此处录入功能Enter是跳转到下一行,Tab是跳转到右侧列,实现键盘盲打录入不依赖鼠标实现。...,使我们在上层构建业务代码变得如此轻松,此篇给大家展示了在工作表单元格区域上创建自定义控件能力,发挥得当,较直接弹出窗体效果要友好得多。

1.3K10

C# winform DataGridView 常见属性

C# winform DataGridView 属性说明 ① 取得或者修改当前单元格内容 ② 设定单元格只读 ③ 不显示最下面的新行 ④ 判断新增行 ⑤ 行用户删除操作自定义 ⑥ 行、列隐藏和删除...如果希望,DataGridView 内某个单元格不可编辑, 那么只要: // 设置 DataGridView1 第2列整列单元格只读 DataGridView1.Columns[1].ReadOnly...DataGridView.ClipboardCopyMode 属性被设定为 DataGridViewClipboardCopyMode.Disable 以外情况,「Ctrl + C」 时候,...「Ctrl + V」下进行粘贴DataGridView 没有提供方法,只能自己实现。 以下,是粘贴简单事例代码,将拷贝数据粘贴到以选择单元格开始区域内。...在该事件处理除了可以设定默认值以外,还可以指定某些特定单元格ReadOnly属性等。

3.7K40
  • C#—— DataGridView控件各种操作总结(单元格操作,属性设置)

    ********DataGridView 设定单元格只读: 1) 使用 ReadOnly 属性 ? ...[0,0]单元格只读 DataGridView1[0, 0].ReadOnly = true; *******DataGridView 行头列头单元格 // 改变DataGridView1第一列列头内容...在该事件处理除了可以设定默认值以外,还可以指定某些特定单元格ReadOnly属性等。...DataGridView.ClipboardCopyMode 属性被设定为 DataGridViewClipboardCopyMode.Disable 以外情况,「Ctrl + C」 时候,被选择单元格内容会拷贝到系统剪切板内...「Ctrl + V」下进行粘贴DataGridView 没有提供方法,只能自己实现。 以下,是粘贴简单事例代码,将拷贝数据粘贴到以选择单元格开始区域内。

    7.5K32

    DataGridView控件用法一:数据绑定

    在绑定到包含多个列表或表数据源,只需将DataMember属性设置为指定要绑定列表或表字符串即可。...一、非绑定模式 所谓非绑定模式就是DataGridView控件显示数据不是来自于绑定数据源,而是可以通过代码手动将数据填充到DataGridView控件,这样就为DataGridView控件增加了很大灵活性...与基于文本值一起使用,在绑定到数字和字符串类型自动生成 DataGridViewCheckBoxColumn 与boolean和checkState值一起使用,在绑定到这些类型自动生成...,通常用来做未绑定列 DataGridViewComboBoxColumn 用户在单元格显示下拉列表,不会在绑定时自动生成,通常需要手动进行数据绑定 DataGridViewLinkColumn 用于在单元格显示超链接...在绑定到包含多个列表或表数据源,只需将DataMember属性设置为指定要绑定列表或表字符串即可。

    3.9K20

    可视化数据库设计软件有哪些_数据库可视化编程

    2)创建新查询:右击相应表适配器,选择“添加查询”命令,默认向导进入使用SQL语句编辑窗口(见图5-19),并编写SQL语句,单击“下一步”按钮,将“方法名”改为“FillByDeptID”即可。...用户可以使用 DataGridView 控件来显示少量数据只读视图,也可以对其进行缩放以显示特大数据集可编辑视图。...属性:表示记录(行)第j个字段(单元格)。...5.DataGridView编辑 单击DataGridView控件设计器“编辑列”选项,或者在DataGridView控件“属性”面板单击Columns属性右侧省略按钮,即可进入“编辑列...///单元格单击事件,获取当前选择单元格值--以下有3种方法 private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs

    6.7K40

    DataGridView使用小结

    //只选中一行设置活动单元格                     if (dataGridView1.SelectedRows.Count == 1)                     {...contextMenuStrip1.Show(MousePosition.X, MousePosition.Y);                 }             }         } 效果图: 2).复制选中单元格内容到剪贴板... = false;//必须在代码设置 4).显示图片 通常,我们将图片路径保存在数据库,但在dataGridView1要显示图片,可以进行如下操作: ①.添加一个DataGridViewTextBoxColumn...类型列,Name=Path,DataPropertyName=Pic,Visible=False; ②.添加一个DataGridViewImageColumn类型列,Name=Pic; ③.dataGridView1...逐列下边设置可去掉: dataGridView1.Columns[i].SortMode = DataGridViewColumnSortMode.NotSortable;

    2.2K20

    C#——DataGridView控件填写数据事件

    对于DataGridView控件,与单元格内容相关有以下这几个事件: // 当单元格内容改变并且提交之后发生(提交一般是单元格在编辑完之后失去焦点.../ 当单元格进入编辑状态发生 private void dataGridView_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs...private void dataGridView_CellEndEdit(object sender, DataGridViewCellEventArgs e) { } 但是以上这几个事件都不能实现每次向单元格输入新内容发生...EditingControlShowing事件比上述事件还要早发生,他是dataGridView控件为了使用户可以编辑,而加载一个TextBox(如果单元格复选框,是其他控件,那么就加载对应控件)...,加载TextBox这个事件发生,可以在时间参数获取这个TextBox引用,动态注册一个事件即可。

    1.6K62

    计算机一级复习资料

    √25、鼠标指针形状呈抄漏型,表示需要等待 注意:抄漏型表示等待,+表示精确定位 二、单选题 B1、在Excel,复制一个选定单元格数据,需要按住(),并拖动鼠标到目标位置。...(假设当前单元格并非第一行) A BShif+Enter C DEnter 注意:Enter是向下;是向上,但同时选定区域会消失,Shif+EnteR上移且选定区域不消失...;TAB右移 D6、在多媒体系统,最适合存储声、图、文等多媒体信自是(    )。...,要将当前单元格移到Al单元格,应按() A.ct rl+Home B.Home+Shift C.Home D.Pgup 注意:HOME是移到当前行第一个单元格CTRL+HOME是移动到...用”我电脑”或”资源管理器”窗口中“文件”菜单删除命令 B. Shift+ Delete C. Delete D.

    1.2K20

    jupyter扩展插件Nbextensions使用

    为了编辑你快捷,打开键盘快捷帮助对话框,或者下命令模式下h,或者从菜单中选择快捷。 ?...当这个扩展被加载,对话框每一个快捷方式都会显示一个小下拉菜单,其中有删除或编辑快捷方式条目. ? 单击edit item将打开第二个模式对话框,其中有一个文本输入。...当输入有焦点,你可以下键来形成你组合。重置按钮(左边卷发箭头)允许您清除您可能输入任何。 ? 如果你想禁用现有的快捷方式,你可以点击下拉菜单上“禁用”按钮。...,用标题隔开.任何标记标题单元格(也就是以1-6字符开头单元格),一旦呈现,就会变成可折叠.标题折叠/扩展状态存储在单元元数据,并在笔记本加载上重新加载....则在进行注释也会有代码补全提醒.并且此插件不需要用空格形式或者是Tab形式. ---- Nbextensions dashboard tab 在主页中提供配置Nbextensions接口.

    2.9K40

    【C#】让DataGridView输入实时更新数据源计算列

    本文适用Winform开发,且DataGridView数据源为DataTable/DataView情况。...DataGridView(下称dgv),A、B两列都要在dgv显示,其中A列可编辑(ReadOnly=false)。...可以看到,计算列得到更新关键有两处: dgv单元格数据要提交到数据源相应单元格 源行结束编辑状态 常规提交流程,必须使焦点离开单元格所在行(只离开单元格都不行哦)才能达到目的,而我们需求是,编辑过程中就要实时更新...也就是如果要连续输入,必须在每次输入后用鼠标或方向取消全选并将光标定位到正确位置~这不蛋疼吗,必须解决!首先为什么会全选原因不明,我猜是由于数据源更新反过来影响dgv所致。...粗略一看,是EM_SETSEL,经过了解,就是EM_SETSEL,所以接下来要做就是自定义一个文本编辑控件,让它忽略这个消息,完了让这个控件成为dgv单元格文本编辑控件。

    5.2K20

    使用C#开发数据库应用程序

    :教你一招快速输入 输入cw+Tab+Tab,就出来Console.WriteLine();了!...鼠标双击事件,当用户双击窗体发生 MouseMove 鼠标移动事件,当鼠标移过窗体发生 KeyDown 键盘下事件,在首次下某个发生 KeyUp 键盘释放事件,在释放发生 例如...Multiline 表示是否可以在文本框输入多行文本 PasswordChar 指示在作为密码框,文本框显示字符,而不是实际输入文本 ReadOnly 指定是否允许编辑文本框文本...DataGridView列是否移动 ReadOnly 指定单元格是否为只读 AllowUserToAddRows 是否允许用户增加行 false AllowUserToDeletRows 是否允许用户删除行...详细请看P214页 (1)创建窗体,设计窗体界面 (2)设置窗体DataGridView属性 (3)填充数据集,显示数据 (4)将修改后数据提交到数据库 (5)实现性别筛选功能 8-

    5.9K30

    Excel数据输入技巧:跳到下一个单元格或前一个单元格

    稍后,选择该命名区域,然后Tab,以正确顺序轻松地从一个单元格切换到下一个单元格。或者,如果要移回上一个单元格,以便更改输入,Shift+Tab组合。...接下来,按住Ctrl并选择下一个单元格,直到选择完剩余标识为3到7单元格为止。最后,选择顺序第一个单元格,本例单元格C3。 为什么最后选择第一个单元格?...因为这使它成为该区域内活动单元格,因此稍后将自动在该单元格开始。 单元格选择完成后,单击公式栏左侧名称框,输入名称,例如本例为“Grades”,下回车。...单击名称框右侧下拉箭头,选择名称,示例为“Grades”,如下图2所示。 图2 在当前单元格输入学生姓名,Tab或回车到下一个单元格,重复这个步骤直至输入完所有数据。如下图3所示。...图3 提示:要返回到前一个单元格Shift+Tab或者Shift+回车

    2.5K30

    visual studio运行程序快捷_visual studio快捷方式在哪

    CTRL+X剪切 ALT+空格窗口菜单 CTRL+V粘贴 CTRL+ESC开始菜单 拖动某一项CTRL复制所选项目 拖动某一项CTRL+SHIFT创建快捷方式 将光盘插入到CD-ROM...显示“系统属性” 【窗口】+TAB在打开项目之间切换 辅助功能 右边SHIFT八秒钟切换筛选开和关 SHIFT五次切换粘滞开和关 NUMLOCK五秒钟切换切换开和关 左边...Ctrl+[ 磅值缩小所选定内容字号 Ctrl+“=” 将选定内容设为下标 Ctrl+“+” 将选定内容设为上标 Ctrl+“*” 显示/隐藏所有非打印字符 Ctrl+Tab单元格插入制表位...,并将插入点放置到单元格内容末尾 Backspace 编辑活动单元格,然后清除该单元格,或在编辑单元格内容删除活动单元格 前一字符 Delete 删除插入点右侧字符或删除选定区域中内容...绘图下Alt 临时切换“格线对齐”功能 画椭圆同时按住Shift 绘制垂直、水平、30 度、45 度或60 度角直线 画椭圆同时按住Ctrl+Shift 绘制以特定点为圆心画圆

    4.8K10
    领券