冻结数据网格视图中的第一行和前两列

本文关键字:一行 数据 两列 视图 网格 冻结 数据网 | 更新日期: 2023-09-27 18:36:15

我有一个数据网格视图,正在尝试实现以下目标:1.垂直滚动时应冻结顶行。2.前两列应水平冻结滚动。

我应用了该列。Freeze = true,它工作正常,但是当应用row[0].freeze = true时,它不适用于行冻结。

冻结数据网格视图中的第一行和前两列

当我创建 DataGridView 时,我将其与 DataTable 关联,然后立即将前两行设置为冻结。行不会冻结。但是,如果我处理按钮单击并将行设置为在该按钮单击中冻结,则行成功冻结。那么,如何在关联表后立即冻结行?

下面是一些代码:

 DataTable dataTable = new DataTable();
    // Just add a bunch of columns
    for (int i = 0; i < 15; i++)
    {
    dataTable.Columns.Add("Col" + i.ToString(), typeof
    (string));
    }
    // Add a bunch of rows to the DataTable, with some dummy
    values
    for (int i = 0; i < 100; i++)
    {
    DataRow row = dataTable.NewRow();
    for (int j = 0; j < 15; j++)
    {
    row["Col" + j.ToString()] = "Val" + i.ToString() +
    "-" + j.ToString();
    }
    dataTable.Rows.Add(row);
    }
    gridView.DataSource = dataTable;
    gridView.Rows[1].Frozen = true;

这是行不通的。行不会冻结。但是,如果我将gridView.Rows[1].Frozen = true;行粘贴在按钮事件处理程序中,它可以工作。那么,如何在不需要用户触发事件的情况下执行此操作?我看到两种解决方案:

  1. 以这种方式绑定数据:

    for (int i = 0; i < 15; i++)
    {
    DataGridViewTextBoxColumn c = new DataGridViewTextBoxColumn();
    c.Name = "Col" + i.ToString();
    gridView.Columns.Add(c);
    }
    gridView.Rows.Add(100);
    for (int i = 0; i < 100; i++)
    for (int j = 0; j < 15; j++)
    gridView.Rows[i].Cells[j].Value = "Val" + i.ToString() + "-" + j.ToString();
    gridView.Rows[0].Frozen = true;
    
  2. 在此事件中选择冻结的行:

    private void gridView_DataBindingComplete(object sender,
    DataGridViewBindingCompleteEventArgs e)
    {
    FrozeFirstRow();
    }