トップ回答者
datagridview に表示される文字列の編集について

質問
回答
-
TH01さんが以下で触れられていますが、DataGridViewのCellFormatting イベントや CellParsingイベントを使う方法、
TableAdapterを利用する場合の文字列操作
http://social.msdn.microsoft.com/Forums/ja-JP/vbexpressja/thread/862bc043-237b-4d96-b309-d8902e6c2a1aDataGridViewのCellPaintingイベントで好きなように描いてしまう方法、
DataGridViewのセル表示について
http://dobon.net/vb/bbs/log3-37/22558.htmlSQL文で最初から切り捨ててしまう方法(T-SQLであればsubstring)などを思いつきます。
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/- 回答としてマーク おおつの井上です。 2010年9月9日 7:34
-
既に対処されたとのことですが、一応方法を書かせていただきます。
表示する為に値を加工するのでしたら、CellFormatting イベントが使用できます。
新規作成したプロジェクトの Form1 のコードを、以下に差し替えて実行してみてください。
(このサンプルでは DataTable や DataGridView を動的に作成していますが、重要なのは CellFormatting イベント内のコードです。)
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
var dt = new DataTable();
dt.Columns.Add("col1", typeof(string));
dt.Rows.Add("12345678901234567890");
dt.Rows.Add("12345678901234567890");
dataGridView1 = new DataGridView();
this.Controls.Add(dataGridView1);
dataGridView1.DataSource = dt;
dataGridView1.CellFormatting += dataGridView1_CellFormatting;
}
private DataGridView dataGridView1;
private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if (dataGridView1.Columns[e.ColumnIndex].DataPropertyName == "col1")
{
// e.Value には表示予定の値が格納されています。
// これを実際に表示したい値に変更すると、それが表示されます。
// 元の(今回の場合は DataTable の)データが変化するわけではなく、
// 表示だけに影響します。
// 今回は不要ですが、e.FormattingApplied = true; も必要により行います。
var value = (e.Value ?? "").ToString();
if (value.Length > 16)
e.Value = value.Substring(0, 16);
}
}
}- 回答としてマーク おおつの井上です。 2010年9月9日 16:18
すべての返信
-
TH01さんが以下で触れられていますが、DataGridViewのCellFormatting イベントや CellParsingイベントを使う方法、
TableAdapterを利用する場合の文字列操作
http://social.msdn.microsoft.com/Forums/ja-JP/vbexpressja/thread/862bc043-237b-4d96-b309-d8902e6c2a1aDataGridViewのCellPaintingイベントで好きなように描いてしまう方法、
DataGridViewのセル表示について
http://dobon.net/vb/bbs/log3-37/22558.htmlSQL文で最初から切り捨ててしまう方法(T-SQLであればsubstring)などを思いつきます。
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/- 回答としてマーク おおつの井上です。 2010年9月9日 7:34
-
trapemiya さん、有難うございました。
色んな方法があるようで、教えて頂いた URLを読ませて頂き、色々とトライ
してみたのですが、残念ながら私の知識では十分理解が伴いませんでした。何かきっかけを掴んで、次の質問ができるにも至らない状態で、もう少し
知識を深めてから再挑戦するのが良いのかなと思っています。目的を達成するためには、とりあえずテーブルに1カラム増やし、レコード
をインサート作る際に表示したい文字列をあらかじめ作っておき、これを
先に追加したカラムに保存しておく事にしました。
(少々、みっともないですが・・・)そんな事で、折角お教え頂いたアドバイスを生かせず、申し訳ありません。
もう少し知識が深まり、的確な質問ができるようになった時には、また質問
させて頂こうと思っています。その節にはどうぞ宜しくお願いいたします。
有難うございました。 -
既に対処されたとのことですが、一応方法を書かせていただきます。
表示する為に値を加工するのでしたら、CellFormatting イベントが使用できます。
新規作成したプロジェクトの Form1 のコードを、以下に差し替えて実行してみてください。
(このサンプルでは DataTable や DataGridView を動的に作成していますが、重要なのは CellFormatting イベント内のコードです。)
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
var dt = new DataTable();
dt.Columns.Add("col1", typeof(string));
dt.Rows.Add("12345678901234567890");
dt.Rows.Add("12345678901234567890");
dataGridView1 = new DataGridView();
this.Controls.Add(dataGridView1);
dataGridView1.DataSource = dt;
dataGridView1.CellFormatting += dataGridView1_CellFormatting;
}
private DataGridView dataGridView1;
private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if (dataGridView1.Columns[e.ColumnIndex].DataPropertyName == "col1")
{
// e.Value には表示予定の値が格納されています。
// これを実際に表示したい値に変更すると、それが表示されます。
// 元の(今回の場合は DataTable の)データが変化するわけではなく、
// 表示だけに影響します。
// 今回は不要ですが、e.FormattingApplied = true; も必要により行います。
var value = (e.Value ?? "").ToString();
if (value.Length > 16)
e.Value = value.Substring(0, 16);
}
}
}- 回答としてマーク おおつの井上です。 2010年9月9日 16:18