【问题标题】:freeze top row and first two columns in datagridview冻结datagridview中的顶行和前两列
【发布时间】:2012-06-04 06:05:35
【问题描述】:

我有一个 datagridview 并试图实现以下目标: 1. 垂直滚动时应冻结顶行。 2. 水平滚动时,前两列应该被冻结。

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

【问题讨论】:

  • row[0].freeze = true 意味着冻结一个单元格,不是吗?
  • 我猜他的意思是 rows[0].freeze。我不认为 row[0].freeze 会编译..
  • .Rows[0].Frozen = true; 应该可以工作! !
  • 这里是一个例子,你可以如何做到这一点,测试它是否有效:msdn.microsoft.com/en-us/library/…

标签: c# winforms datagridview


【解决方案1】:

当我创建 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();
    }
    

【讨论】:

  • 冻结 (dataGridViewPlatypi.Rows[0].Frozen = true;) 对我不起作用。
  • 我确实重现了这个问题,该问题仅在我的网站上发生在构造函数内部。我使用 VisibleChanged-Event 解决了这个问题: grivView.VisibleChanged += (s, e) => { FrozeFirstRow(); };
猜你喜欢
  • 1970-01-01
  • 2021-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-09
  • 1970-01-01
  • 2021-08-29
  • 1970-01-01
相关资源
最近更新 更多