简体   繁体   中英

DataGridView not displaying data in ToolStripDropDown

I'm utilizing the code posted by Jesper Palm here: Make user control display outside of form boundry

/// <summary>
/// A simple popup window that can host any System.Windows.Forms.Control
/// </summary>
public class PopupWindow : System.Windows.Forms.ToolStripDropDown
{
    private System.Windows.Forms.Control _content;
    private System.Windows.Forms.ToolStripControlHost _host;

    public PopupWindow(System.Windows.Forms.Control content)
    {
        //Basic setup...
        this.AutoSize = false;
        this.DoubleBuffered = true;
        this.ResizeRedraw = true;

        this._content = content;
        this._host = new System.Windows.Forms.ToolStripControlHost(content);

        //Positioning and Sizing
        this.MinimumSize = content.MinimumSize;
        this.MaximumSize = content.Size;
        this.Size = content.Size;
        content.Location = Point.Empty;

        //Add the host to the list
        this.Items.Add(this._host);
    }
}

I've translated it to VB:

Public Class PopupWindow
    Inherits System.Windows.Forms.ToolStripDropDown

    Private _content As System.Windows.Forms.Control
    Private _host As System.Windows.Forms.ToolStripControlHost

    Public Sub New(ByVal content As System.Windows.Forms.Control)

        Me.AutoSize = False
        Me.DoubleBuffered = True
        Me.ResizeRedraw = True

        Me._content = content
        Me._host = New System.Windows.Forms.ToolStripControlHost(content)

        Me.MinimumSize = content.MinimumSize
        Me.MaximumSize = content.MaximumSize
        Me.Size = content.Size
        content.Location = Point.Empty

        Me.Items.Add(Me._host)

    End Sub

End Class

It works great with a PictureBox showing its information. But for some reason I cannot get the DataGridView to display anything when it is in the popup.

If I pull the grid out of the popup it displays all of its information fine. If I pause during debug, the grid shows that it has all the data in it. It's just not displaying anything.

Does anybody have any ideas?

I have not been able to reproduce your problem. Can you provide more code? I've been testing in VS2010 RC (.NET 4) and VS2008 (.NET 3.5) and this code works in both:

public partial class Form1 : Form
{
    public class Person
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string PhoneNumber { get; set; }
    }

    List<Person> _People;

    public Form1()
    {
        InitializeComponent();

        _People = new List<Person>();
        _People.Add(new Person() { FirstName = "John", LastName = "Smith", PhoneNumber = "123-456-7890" });
        _People.Add(new Person() { FirstName = "Jane", LastName = "Doe", PhoneNumber = "098-765-4321" });
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        pictureBox1.Image = Image.FromFile("barcode.png");
        pictureBox1.Location = new Point(-1000, -1000);

        dataGridView1.DataSource = _People;
        dataGridView1.Location = new Point(-1000, -1000);
    }

    private void button1_Click(object sender, EventArgs e)
    {
        PopupControl popup = new PopupControl(pictureBox1);
        popup.Show(new Point(this.Location.X - 128, this.Location.Y));
    }

    private void button2_Click(object sender, EventArgs e)
    {
        PopupControl popup = new PopupControl(dataGridView1);
        popup.Show(new Point(this.Location.X - 128, this.Location.Y));

        //optionally change the items in the data source
        _People.Add(new Person() { FirstName = "NewFirst", LastName = "NewLast", PhoneNumber = "123-333-3322" });

        //reset the bindings
        bindingSource1.DataSource = _People;
        bindingSource1.ResetBindings(true);
    }
}

Here's what it looks like: alt text http://img534.imageshack.us/img534/1640/popupcontrolwithgrid.jpg

In the designer, you should setup the BindingSource and assign it as the DataGridView's DataSource.

It's probably a drawing issue. Maybe you could try a .Refresh on either the popupcontainer or the grid after it's been shown?

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM