8

ユーザーがファイルをドラッグ/ドロップすると、CSV データが取り込まれるデータグリッドがあります。「ここにファイルをドラッグしてください」や「このグリッドは現在空です」などのメッセージを空白のグリッドに表示することはできますか? ファイルをドラッグして列などを設定するまで待っているため、現在、グリッドは濃い灰色のボックスとして表示されています。

4

4 に答える 4

8

DataGridView コントロールをサブクラス化し、これを追加しました。ドラッグ アンド ドロップ機能は必要ありませんでした。クエリから返されたデータがないことをユーザーに伝える必要があっただけです。

次のように宣言された emptyText プロパティがあります。

    private string cvstrEmptyText = "";
    [Category("Custom")]
    [Description("Displays a message in the DataGridView when no records are displayed in it.")]
    [DefaultValue(typeof(string), "")]
    public string EmptyText
    {
        get
        {
            return this.cvstrEmptyText;
        }
        set
        {
            this.cvstrEmptyText = value;
        }
    }

PaintBackground 関数をオーバーロードしました。

    protected override void PaintBackground(Graphics graphics, Rectangle clipBounds, Rectangle gridBounds)
    {
        RectangleF ef;
        base.PaintBackground(graphics, clipBounds, gridBounds);
        if ((this.Enabled && (this.RowCount == 0)) && (this.EmptyText.Length > 0))
        {
            string emptyText = this.EmptyText;
            ef = new RectangleF(4f, (float)(this.ColumnHeadersHeight + 4), (float)(this.Width - 8), (float)((this.Height - this.ColumnHeadersHeight) - 8));
            graphics.DrawString(emptyText, this.Font, Brushes.LightGray, ef);
        }
    }
于 2009-02-09T21:59:06.550 に答える
1

代わりに gridview を使用する場合は、EmptyDataText プロパティを使用できます。それはデータグリッドができることすべてを行うことができ、(IMHO)ほとんどの場合、操作が簡単だと思います

于 2009-02-09T21:48:49.193 に答える
1

ここで行う最も簡単な方法は、巨大なラベル コントロールを作成して "Drag Here" を実行し、ラベルのドラッグ/ドロップ イベントを処理することだと思います。ドラッグ アンド ドロップが完了したら、ラベルを非表示にしてグリッドを表示します。

于 2009-02-09T21:45:14.930 に答える
0

この状況で私が行うことは、タブ コントロールをフォームに追加し、DGV を 1 つのタブに配置し、ラベル (「ここにドラッグ」など) を別のタブに配置することです。タブを非表示にします。次に、DGV が空の場合は、ラベルの付いたタブを表示します。routeNpingme の回答と同様に、ここでドラッグ/ドロップ イベントを処理し、バックグラウンドで DGV を読み込み、読み込みが完了したらタブを切り替えます。VS Designer でタブ間を簡単に切り替えることもできるため、これは便利です。

于 2009-02-09T22:34:26.230 に答える