2

Winforms DataGridView では、どうすればよいですか:

  1. 行ヘッダーの矢印を削除しますか? 行ヘッダーのテキストを表示する必要があるため、単純に設定することはできませんRowHeadersVisible = false
  2. 行ヘッダーの幅をプログラムで調整しますか? コードで行ヘッダーを設定しているので、変更時に行ヘッダーのテキストを表示するために幅を調整する必要があります。
4

3 に答える 3

5

まず、DataGridView として知られている関数をオーバーライドします。

private void dataGridView1_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
{
    e.PaintHeader(DataGridViewPaintParts.All & ~DataGridViewPaintParts.ContentBackground);
}

ボタンをクリックすると、行ヘッダーに値が追加されます

private void button1_Click(object sender, EventArgs e)
{
    string a = "khan yousafzai";
    dataGridView1.RowHeadersWidth = dataGridView1.RowHeadersWidth +(7* a.Length);
    dataGridView1.Rows[0].HeaderCell.Value = a;
    dataGridView2.Rows.Add();
}
于 2012-08-31T12:08:43.467 に答える
1
  1. 並べ替えを許可する必要がありますが、矢印は表示しませんか? そうでない場合は、各列SortModeを に設定してNotSortableください。並べ替える必要があるが矢印を表示しない場合は、列SortModeをに設定し、列またはイベントProgrammaticのデータ ソースを手動で並べ替えます。ClickMouseDown

  2. 列ヘッダーを必要なテキストに設定したら、フォームGraphicsクラスを使用してテキストの幅を取得し、それに応じて列幅を設定します。

    Graphics g = this.CreateGraphics();
    int w = (int)g.MeasureString(dataGridView1.Columns[0].HeaderText, dataGridView1.Font).Width;
    this.dataGridView1.Columns[0].Width = w;
    
于 2012-08-30T02:53:05.140 に答える
0

まず、C# .Net 2.0 以降で数直線 RowHeadersWidth を DataGridView に追加する方法:

// On Form_Load add the numeration to DataGridView Row Header
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
    dataGridView1.Rows[i].HeaderCell.Value = (i + 1).ToString();
}

これで、Microsoft Excel と同様に、行ヘッダーのサイズに応じて動的にサイズを変更できます。

// Dinamically adjust row header size to max current width available (like Microsoft Excel does)
private void dataGridView1_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e)
{
    int firstDisplayedCellIndex = dataGridView1.FirstDisplayedCell.RowIndex;
    int lastDisplayedCellIndex = firstDisplayedCellIndex + dataGridView1.DisplayedRowCount(true);
    
    Graphics Graphics = dataGridView1.CreateGraphics();
    int measureFirstDisplayed = (int)(Graphics.MeasureString(firstDisplayedCellIndex.ToString(), dataGridView1.Font).Width);
    int measureLastDisplayed = (int)(Graphics.MeasureString(lastDisplayedCellIndex.ToString(), dataGridView1.Font).Width);
                
    int rowHeaderWitdh = System.Math.Max(measureFirstDisplayed, measureLastDisplayed);
    dataGridView1.RowHeadersWidth = rowHeaderWitdh + 35;
}

このソリューションは、CF ではなく、.Net Framework 2.0 以降専用です。

于 2013-01-17T12:33:59.563 に答える