如何获取DataGridView当前行的id号

本文介绍如何在数据网格中获取当前选中行的ID,包括使用SelectedRows和Cells属性的方法,并通过示例代码展示应用过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前提是,必须让数据库中的id号显示在表格中,(当然你可以显示后再隐藏掉)

如何获取当前选中的行的id呢?假设第一列就是id值

方法是:

dataGridView1.SelectedRows[0].Cells[0].Value.ToString()  进而用int.Parse(dataGridView1.SelectedRows[0].Cells[0].Value.ToString())

或者:Convert.ToInt32(this.dgvUser.CurrentRow.Cells[0].Value.ToString())

label9.Text = this.dataGridView1.CurrentRow.Cells[0].Value.ToString();

<think>我们有两个需求:1. 设置DataGridView数据不可编辑;2. 禁止调整(包括列宽和行高)。 根据用户的问题,结合之前的回答和引用,我们需要提供以下解决方案: 一、禁止编辑数据: 1. 设置整个DataGridView为只读:`dataGridView1.ReadOnly = true;` 2. 设置特定列为只读:`dataGridView1.Columns["列名"].ReadOnly = true;` 3. 设置特定单元格为只读:`dataGridView1.Rows[行索引].Cells[列索引].ReadOnly = true;` 二、禁止调整列宽和行高: 1. 禁止调整列宽: 全局禁止:`dataGridView1.AllowUserToResizeColumns = false;` 单列禁止:`dataGridView1.Columns["列名"].Resizable = DataGridViewTriState.False;` 2. 禁止调整行高: 全局禁止:`dataGridView1.AllowUserToResizeRows = false;` 单行禁止:`dataGridView1.Rows[行索引].Resizable = DataGridViewTriState.False;` 三、其他相关设置(参考引用): 1. 禁止用户添加新行:`dataGridView1.AllowUserToAddRows = false;` [^2] 2. 禁止用户删除行:可以通过设置`AllowUserToDeleteRows`属性为`false`。 四、注意:如果设置了整个控件为只读,那么所有单元格都是只读的,但用户仍然可能调整列宽和行高,除非单独设置禁止调整。 五、组合设置示例: 要实现一个完全不可修改且不可调整的DataGridView,可以这样设置: ```csharp // 禁止编辑数据 dataGridView1.ReadOnly = true; // 禁止调整列宽 dataGridView1.AllowUserToResizeColumns = false; // 禁止调整行高 dataGridView1.AllowUserToResizeRows = false; // 禁止添加新行 dataGridView1.AllowUserToAddRows = false; // 禁止删除行 dataGridView1.AllowUserToDeleteRows = false; ``` 六、如果需要更细粒度的控制(例如某些列可编辑,某些不可编辑),则不要设置整个控件的ReadOnly,而是设置具体列或行的ReadOnly和Resizable属性。 七、引用[1]中提到了设置行不可调整,但注意:引用[1]的代码是`DataGridView1.Rows[0].Resizable = DataGridViewTriState.False;`,这设置的是第一行的高度不可调整(注意:行高调整通常整行设置,列宽调整是按列设置)。 八、引用[3]中提到了处理合并单元格等复杂情况,但用户当前需求是禁止编辑和调整,所以暂时不需要考虑合并单元格的问题。 九、设计时设置:在Visual Studio的属性窗口中,可以找到上述属性进行设置。 十、注意事项: 1. 如果设置了`ReadOnly=true`,那么用户不能编辑任何单元格,但程序仍然可以通过代码修改单元格的值。 2. 禁止调整列宽和行高的设置不会影响通过代码调整(例如设置`Column.Width`或`Row.Height`)。 完整示例代码: ```csharp // 设置整个DataGridView为只读,禁止编辑 dataGridView1.ReadOnly = true; // 禁止用户调整列宽(全局) dataGridView1.AllowUserToResizeColumns = false; // 禁止用户调整行高(全局) dataGridView1.AllowUserToResizeRows = false; // 禁止用户添加新行 dataGridView1.AllowUserToAddRows = false; // 禁止用户删除行 dataGridView1.AllowUserToDeleteRows = false; // 如果需要设置某一列不可调整列宽(可选,因为全局已经禁止) dataGridView1.Columns[0].Resizable = DataGridViewTriState.False; // 如果需要设置某一行不可调整行高(可选,因为全局已经禁止) dataGridView1.Rows[0].Resizable = DataGridViewTriState.False; ``` 相关问题: 1. 如何只禁止DataGridView的某一列编辑? 2. DataGridView的ReadOnly属性与Column的ReadOnly属性优先级关系? 3. 如何防止用户改变DataGridView的表头高度? 4. 如何设置DataGridView的列宽自适应内容且禁止用户调整? 5. 如何通过代码动态切换DataGridView的编辑状态?</think>### 在 C# DataGridView 中设置数据不可编辑和禁止调整的完整解决方案 #### 一、禁止数据编辑 1. **全局禁止编辑** ```csharp // 设置整个DataGridView为只读 dataGridView1.ReadOnly = true; ``` 2. **禁止特定列编辑** ```csharp // 禁止"ID"列编辑 dataGridView1.Columns["ID"].ReadOnly = true; ``` 3. **禁止添加新行** ```csharp // 隐藏底部的新行(带*的行) dataGridView1.AllowUserToAddRows = false; // [^2] ``` 4. **禁止删除行** ```csharp // 防止用户删除行 dataGridView1.AllowUserToDeleteRows = false; ``` #### 二、禁止调整列宽和行高 1. **全局禁止列宽调整** ```csharp // 禁止所有列宽调整 dataGridView1.AllowUserToResizeColumns = false; ``` 2. **禁止特定列宽调整** ```csharp // 禁止第一列宽度调整 dataGridView1.Columns[0].Resizable = DataGridViewTriState.False; // [^1] ``` 3. **全局禁止行高调整** ```csharp // 禁止所有行高调整 dataGridView1.AllowUserToResizeRows = false; ``` 4. **禁止特定行高调整** ```csharp // 禁止第一行高度调整 dataGridView1.Rows[0].Resizable = DataGridViewTriState.False; // [^1] ``` #### 三、完整配置示例 ```csharp // 禁止数据编辑 dataGridView1.ReadOnly = true; dataGridView1.AllowUserToAddRows = false; // [^2] dataGridView1.AllowUserToDeleteRows = false; // 禁止列宽调整 dataGridView1.AllowUserToResizeColumns = false; dataGridView1.Columns["ID"].Resizable = DataGridViewTriState.False; // 禁止行高调整 dataGridView1.AllowUserToResizeRows = false; dataGridView1.Rows[0].Resizable = DataGridViewTriState.False; // [^1] // 可选:禁止排序 dataGridView1.Columns["ID"].SortMode = DataGridViewColumnSortMode.NotSortable; ``` #### 四、优先级规则 1. **列级设置 > 全局设置** 即使设置 `AllowUserToResizeColumns = true`,特定列的 `Resizable = False` 仍会生效 2. **只读层级** `单元格.ReadOnly` > `列.ReadOnly` > `DataGridView.ReadOnly` #### 五、设计时设置(Visual Studio) 1. 属性窗口 → `ReadOnly` = `True` 2. 属性窗口 → `AllowUserToAddRows` = `False` 3. 列集合编辑器 → 设置每列的 `ReadOnly` 和 `Resizable` 4. 行集合编辑器 → 设置每行的 `Resizable` #### 六、高级场景处理 ```csharp // 处理合并单元格时的编辑问题 private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) { if (e.RowIndex > -1 && e.ColumnIndex > -1 && e.RowIndex != e.FormattedValue.ToString()) { e.Cancel = true; // 阻止异常编辑 [^3] } } ``` > **提示**:若需要固定列宽但允许自动调整,可先设置自动调整再禁止用户调整: > ```csharp > dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells; > dataGridView1.AllowUserToResizeColumns = false; > ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值