冻结 datagridview 中的顶行和前两列 [英] freeze top row and first two columns in datagridview

查看:28
本文介绍了冻结 datagridview 中的顶行和前两列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个 datagridview 并且正在尝试实现以下目标:1. 垂直滚动时应冻结顶行.2. 前两列应在水平滚动时冻结.

I have a datagridview and am trying to achieve the following: 1. Top row should be frozen while scrolling vertically. 2. First two columns should be frozen wile scrolling horizontally.

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

I applied the column.Freeze = true and its working fine, but when applying row[0].freeze = true, it doesn't work for row freezing.

推荐答案

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

When I create the DataGridView, I associate it with a DataTable and then immediately set the first two rows to freeze. The rows don't freeze. However, if I handle a button click and set the rows to freeze in that button click, the rows successfully freeze. How, then, do I freeze the rows immediately upon associating the table?

这是一些代码:

 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; 行,它就可以工作.那么,在不需要用户触发事件的情况下,我将如何执行此操作?我看到两种解决方案:

This won't work. The rows are not frozen. However if I stick the gridView.Rows[1].Frozen = true; line in a button event handler, it works. How would I do this, then, without requiring an event trigger from the user? I see two solutions:

  1. 这样绑定数据:

  1. Bind the data this way:

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;

  • 在此事件中选择冻结的行:

  • Select frozen rows in this event:

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

  • 这篇关于冻结 datagridview 中的顶行和前两列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

    查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆