1

私は Windows フォーム アプリケーションを作成しています。多かれ少なかれ、ユーザーの SQL データベースへのインターフェイスとして機能します。フロートをフォームを見るときに小数点以下 1 桁または 2 桁にフォーマットしたいのですが、必要に応じて DataGridView をコピーして、完全なフロートを使用できるようにしたいと考えています。

たとえば、行を小数点以下 1 桁のパーセントにフォーマットする場合は、次を使用します

DataGridView1.Rows[i].DefaultCellStyle.Format = "P1";

これはフォームでは見栄えがしますが、DataGridView をクリップボードにコピーすると、ソースとして使用している DataTable のフロートの小数点以下の桁数が多い場合でも、小数点以下 1 桁しかコピーされません。

フォーマットされていないデータをクリップボードにコピーする方法がわかりません。書式設定されていない非表示の DataGridView にアクセスするコピー ボタンを作成することも検討しましたが、ユーザーが表示されている書式設定された DataGridView から Ctrl-C を実行できるようにしたいと考えています。

何か案は?Ctrl-C 機能をあきらめて、別のコピー機能を作成するだけなので、運が悪いことを知らせてくれるだけでも助かります。ありがとう。

4

1 に答える 1

1

表示されているもの (10 進値) とは異なるものをユーザーがコピーできるようにすることはできません。必要なものを取得するための回避策は、セル内の情報を表示する 2 つの異なる "モード" を有効にすることです: 短い形式と長い形式です。そして、両方のモードを切り替えるユーザーフレンドリーな方法を追加します。例: セルで「Enter」を押します。サンプルコード:

private void dataGridView1_KeyDown(Object sender, System.Windows.Forms.KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        if (shortMode)
        {
            dataGridView1.Rows[curRow].DefaultCellStyle.Format = ""; //Number with all the decimals
            shortMode = false;
        }
        else
        {
            dataGridView1.Rows[curRow].DefaultCellStyle.Format = "P1"; //Number as percentage with 1 decimal
            shortMode = true;
        }
    }
}

はグローバルshortModeに宣言されたブール変数でありcurRow、変更する行です。

于 2013-08-26T15:27:01.967 に答える