datagridviewがあり、次のことを実現しようとしています。1.垂直方向にスクロールしている間、一番上の行をフリーズする必要があります。2.最初の2列は、水平方向にスクロールしながらフリーズする必要があります。
column.Freeze = trueを適用しましたが、正常に機能していますが、row [0] .freeze = trueを適用すると、行のフリーズでは機能しません。
datagridviewがあり、次のことを実現しようとしています。1.垂直方向にスクロールしている間、一番上の行をフリーズする必要があります。2.最初の2列は、水平方向にスクロールしながらフリーズする必要があります。
column.Freeze = trueを適用しましたが、正常に機能していますが、row [0] .freeze = trueを適用すると、行のフリーズでは機能しません。
DataGridViewを作成するときは、それをDataTableに関連付け、すぐに最初の2行をフリーズするように設定します。行はフリーズしません。ただし、ボタンクリックを処理し、そのボタンクリックで行をフリーズするように設定すると、行は正常にフリーズします。それでは、テーブルを関連付けた直後に行をフリーズするにはどうすればよいですか?
ここにいくつかのコードがあります:
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;
ただし、ボタンイベントハンドラーに行を貼り付けると、機能します。では、ユーザーからのイベントトリガーを必要とせずに、これをどのように行うのでしょうか。私は2つの解決策を見ます:
次のようにデータをバインドします。
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;
このイベントで凍結された行を選択します。
private void gridView_DataBindingComplete(object sender,
DataGridViewBindingCompleteEventArgs e)
{
FrozeFirstRow();
}