You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VS2022中C# WinForms DataGridView首加载第1页行表头无编号问题

解决DataGridView首次加载第1页行表头无编号问题

问题分析

核心问题是首次绑定第1页数据后,未触发行表头编号的填充逻辑,而切换页码时会主动调用populateGridRowHeader方法,因此后续页面的行号显示正常。

解决方案

方案1:在BindGrid末尾主动触发行表头填充

修改BindGrid方法,设置数据源后直接计算当前页起始行号并调用填充方法,确保首次加载时执行行号渲染逻辑:

private void BindGrid(int pageIndex)
{
    int recordCount = 0;
    string empName = txtEmployee.Text.Trim();
    DataTable dt;
    if (string.IsNullOrEmpty(empName))
    {
         dt = DBHelper.readDataFromStoredProc("GetWSPageWise", null, pageIndex, PageSize, out recordCount);
    }
    else
    {
         dt = DBHelper.readDataFromStoredProc("GetWSPageWiseFilter", empName, pageIndex, PageSize, out recordCount);
    }
    dataGridView1.DataSource = dt;
    PopulatePager(recordCount, pageIndex);
    
    // 新增:计算当前页起始行号并填充行表头
    int startRowNumber = (pageIndex - 1) * PageSize + 1;
    populateGridRowHeader(startRowNumber);
}

方案2:利用DataBindingComplete事件确保填充时机

若方案1仍存在控件未渲染完成的问题,可通过绑定DataBindingComplete事件,在数据完全绑定后再执行行号填充:

  1. 在窗体初始化时绑定事件:
public YourForm()
{
    InitializeComponent();
    StyleDatagridview();
    // 绑定数据绑定完成事件
    dataGridView1.DataBindingComplete += DataGridView1_DataBindingComplete;
    // 首次加载第1页
    BindGrid(1);
}
  1. 实现事件处理方法:
// 需提前定义存储当前页码的变量,如_currentPageIndex
private int _currentPageIndex = 1;

private void DataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
    int startRowNumber = (_currentPageIndex - 1) * PageSize + 1;
    populateGridRowHeader(startRowNumber);
}

// 记得在BindGrid和页码点击事件中更新_currentPageIndex
private void BindGrid(int pageIndex)
{
    _currentPageIndex = pageIndex;
    // 原有逻辑...
}

补充优化

如果行表头仍有显示异常,可在populateGridRowHeader方法末尾添加强制刷新代码:

private void populateGridRowHeader(int rowNumber)
{
    foreach (DataGridViewRow row in dataGridView1.Rows)
    {
        if (row.IsNewRow) continue;
        row.HeaderCell.Value = rowNumber.ToString();
        rowNumber++;
    }
    dataGridView1.AutoResizeRowHeadersWidth(DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders);
    // 新增:强制刷新行表头
    dataGridView1.InvalidateRowHeaders();
}

内容的提问来源于stack exchange,提问作者user3778637

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 12:46:14