当用户将文件拖放到文件夹上时,我有一个数据网格,其中填充了CSV数据。是否可以在空白网格中显示消息,例如“请在此处拖动文件”或“此网格当前为空”。当我等到文件被拖动以设置列等时,网格当前显示为深灰色框。
答案 0 :(得分: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);
}
}
答案 1 :(得分:1)
我认为这里最简单的方法是制作一个巨型标签控件来执行“Drag Here”并处理标签的拖放事件。拖放完成后,隐藏标签并显示网格。
答案 2 :(得分:1)
如果您使用gridview,则可以使用EmptyDataText属性。它可以做数据网格可以做的所有事情和(恕我直言)我认为在大多数情况下更容易使用
答案 3 :(得分:0)
在这种情况下我做的是在表单中添加一个制表符控件,将DGV放在一个选项卡中,并在另一个选项卡中添加一个标签('Drag Here'或类似的东西)。隐藏标签。然后,如果DGV为空,则显示带有标签的选项卡。就像routeNpingme的答案一样,你可以在这里处理拖放事件,在后台加载DGV,然后在加载完成后切换标签。这很好,因为您还可以在VS Designer中轻松地在选项卡之间来回切换。