未绑定DataTable的DataGridView排序时固定首列显示行号如何实现
实现方案
核心思路
利用DataGridView自带的Sorted事件,在每次非首列排序完成后直接重写首列的行序号即可,不需要修改原有排序逻辑,也不需要绑定数据源,是最轻量化的实现方案。
具体操作步骤
- 首先配置首列属性:将首列的
SortMode属性设置为DataGridViewColumnSortMode.NotSortable,禁止用户点击首列表头触发排序 - 其余需要支持排序的列,保持
SortMode为默认的Automatic即可 - 给DataGridView绑定
Sorted事件,事件处理逻辑如下:
private void dataGridView1_Sorted(object sender, EventArgs e) { // 遍历所有行,重写首列的行序号 for (int i = 0; i < dataGridView1.Rows.Count; i++) { // 首列索引为0,如果首列设置了名称也可以用Columns["自定义列名"]的方式取值 dataGridView1.Rows[i].Cells[0].Value = i + 1; } }
- 程序启动插入完所有初始数据后,主动执行一次上述逻辑给首列赋初始值即可。
方案优势
- 完全适配你的使用场景:无需绑定DataTable,不用修改原有数据插入逻辑,仅需要新增一个事件处理即可
- 性能开销极低:由于你的数据是固定不变的,排序后重刷序号的操作只会在用户点击表头时触发一次,不会产生多余性能消耗
- 逻辑简单易维护,无额外依赖
内容的提问来源于stack exchange,提问作者André
相关产品推荐
相关产品推荐

