冻结datagridview中的顶行和前两列

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

我应用了column.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(); }