1. このコードは、長すぎる文字列を処理する本体です。
void ItemDataBound(オブジェクト送信者、DataGridItemEventArgs e)
{
// 表示する文字列を取得する
string title = GetTheString();
// 指定された列の更新されたテキストを返します。
string newText = AdjustTextForDisplay(タイトル, 1, グリッド);
// 必要に応じてツールチップを含むテキストを設定します
e.Item.Cells[1].Text = newText;
2.
AdjustTextForDisplay(string,int,DataGrid) 関数の機能は、列の幅に応じて長すぎる文字列をインターセプトすることです。
ここで注意する必要があるのは、DataGrid の Font プロパティと Columns[colIndex].ItemStyle.Width プロパティに値を割り当てる必要があることです。値が割り当てられていない場合、関数はシステムのデフォルト値を使用します。処理されない場合、関数は例外をスローします。
string AdjustTextForDisplay(string text, intcolIndex, DataGrid グリッド)
{
// 現在のフォントを使用してテキストのサイズを計算します。
SizeF textSize = MeasureString(text, Grid.Font);
// サイズと列の幅を比較します
int colWidth = (int) Grid.Columns[colIndex].ItemStyle.Width.Value;
if(textSize.Width >colWidth)
{
// 超過したピクセルを取得する
int デルタ = (int) (textSize.Width -colWidth);
// 文字の平均幅(およそ)を計算します
int avgCharWidth = (int) (textSize.Width/text.Length);
// 固定幅に収まるようにトリミングする文字数を計算します (概算)
int chrToTrim = (int) (delta/avgCharWidth);
// 適切な部分文字列 + 省略記号を取得します
// 省略記号用のスペースを確保するために、さらに 2 文字 (おおよそ) をトリミングします。
string rawText = text.Substring(0, text.Length-(chrToTrim+2)) + "";
// ツールチップを追加するためのフォーマット
文字列 fmt = "{1}";
return String.Format(fmt, text, rawText);
}
テキストを返します。
}