プレゼンテーションの目的でデータテーブルから供給されるdatagridviewの列の1つにあるテキストを変更したい(具体的には、そこでの用語を別の言語に翻訳したい)。データ全体を自分のテーブルに移動してそこで変更することでこれを実行できると思いますが、回避できるかどうかはわかりません。何か案が ?
2 に答える
DataGridView でこれを行う正しい方法は、MSDN で説明されているCellFormating イベントを使用することです。ハウツー記事でできることの良い例がありますが、ここでも概要を説明しました。
CellFormating
まず、デザイン ビューまたはコードを使用して、イベントをサブスクライブする必要があります。
this.dataGridView1.CellFormatting += new System.Windows.Forms.DataGridViewCellFormattingEventHandler(this.dataGridView1_CellFormatting);
次に、イベント ハンドラーにロジックを配置して、データを表示用にフォーマットします。
private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if (!dataGridView1.Rows[e.RowIndex].IsNewRow && e.ColumnIndex == dataGridView1.Columns["InterestingColumn"].Index)
{
if (e.Value == null)
return;
if (e.Value.ToString() == "TargetValue")
{
e.Value = "DisplayValue";
}
}
}
これにより、DataSet の基になる値は変更されません。表示される値のみが変更され、各セルがイベントを離れた後にイベントがトリガーされるため、ユーザーは (読み取り専用でない場合) グリッドにデータを入力でき、書式設定が適用されます。
もちろん、これはすべて自由にカスタマイズできますが、CellFormating イベントから始めるのが最適です。
最初に行うことは、DataGridViewとDataTableを適切にバインドすることです。
BindingSource bs = new BindingSource();
bs.Datasource = mydatatable;
dataGridView1.Datasource = bs;
DataTableで行った変更は、データグリッドに自動的に反映されます。その逆も同様です。
次に、DataTableの各行を反復処理できます。各行の指定された列の値を変換できます。このようなもの :-
foreach(DataRow row in mydatatable.rows)
{
// Do your translation code
row["SpecificColumnName"] = yourTranslatedvalue;
}
そのかなり基本的なものですが、それはあなたが始めるのに役立つかもしれません。