是否可以在空数据网格中显示消息

Posted

技术标签:

【中文标题】是否可以在空数据网格中显示消息【英文标题】:Is it possible to display a message in an empty datagrid 【发布时间】:2010-10-06 12:27:51 【问题描述】:

我有一个数据网格,当用户将文件拖放到它上面时,它会填充 CSV 数据。是否可以在空白网格中显示消息,例如“请在此处拖动文件”或“此网格当前为空”。网格当前显示为深灰色框,因为我等到拖动文件以设置列等。

【问题讨论】:

【参考方案1】:

我们继承了 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);
        
    

【讨论】:

这很好,可重复使用,没有额外的逻辑,我可以在设计器中设置空文本【参考方案2】:

我认为这里最简单的做法是制作一个巨大的标签控件来执行“拖到此处”并处理标签的拖放事件。拖放完成后,隐藏标签并显示网格。

【讨论】:

我过去曾在 ListViews 中使用过这种技术,漂亮、干净、简单!【参考方案3】:

如果您改用 gridview,则可以使用 EmptyDataText 属性。它可以做数据网格可以做的所有事情,而且(恕我直言)我认为在大多数情况下它更容易使用

【讨论】:

这可能是一个解决方案,但我使用的是 Winforms 而不是 ASP。我需要对此进行调查【参考方案4】:

在这种情况下,我所做的是向表单添加一个选项卡控件,将 DGV 放在一个选项卡中,并将标签(“拖到此处”或类似的东西)放在另一个选项卡中。隐藏标签。然后,如果 DGV 为空,则显示带有标签的选项卡。就像 routeNpingme 的回答一样,您将在此处处理拖放事件,在后台加载 DGV,然后在加载完成后切换选项卡。这很好,因为您还可以在 VS Designer 中轻松地在选项卡之间来回切换。

【讨论】:

以上是关于是否可以在空数据网格中显示消息的主要内容,如果未能解决你的问题,请参考以下文章

GridView - 在空数据源上显示标题

如何将网格线保留在空的 TableView Javafx 中

如果未找到记录,如何在 Movilizer 数据网格中显示消息

如何自定义剑道网格中的消息显示?

EXTjs 4.2.1 加载网格数据时显示默认数据

显示来自sqlite数据库的数据时“尝试在空对象引用上调用虚拟方法”[重复]