Можно ли отобразить сообщение в пустой сетке данных? - PullRequest
8 голосов
/ 10 февраля 2009

У меня есть сетка данных, которая заполняется данными CSV, когда пользователь перетаскивает на него файл. Можно ли отобразить сообщение в пустой сетке, например «Пожалуйста, перетащите файл сюда» или «Эта сетка в настоящее время пуста». В настоящее время сетка отображается в виде темно-серого прямоугольника, пока я жду, пока файл не будет перетащен для настройки столбцов и т. Д.

Ответы [ 4 ]

8 голосов
/ 10 февраля 2009

Мы вложили в подкласс элемент управления 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);
        }
    }
1 голос
/ 10 февраля 2009

если вы используете вместо этого gridview, вы можете использовать свойство EmptyDataText. Он может делать все, что может делать сетка данных, и (ИМХО), я думаю, с ним легче работать в большинстве случаев

1 голос
/ 10 февраля 2009

Я думаю, что здесь проще всего сделать гигантский элемент управления меткой, чтобы выполнить «Перетаскивание сюда» и обработать событие перетаскивания метки. После завершения перетаскивания скройте метку и покажите сетку.

0 голосов
/ 10 февраля 2009

В этой ситуации я добавляю элемент управления вкладкой в ​​форму, помещаю DGV в одну вкладку и метку («Перетащите сюда» или что-то подобное) в другую вкладку. Скрыть вкладки. Затем, если DGV пуст, покажите вкладку с меткой. Так же, как и в ответе routeNpingme, вы обработаете событие перетаскивания здесь, загрузите DGV в фоновом режиме, а затем переключите вкладки, когда загрузка будет завершена. Это хорошо, потому что у вас также есть возможность легко переключаться между вкладками во время работы в VS Designer.

...