jim bob
jim bob

Reputation: 131

c#: Invalid Cast Exception

can anyone help me out with this, i'm really struggling to work out how to correct this error:

public class ModDataGridView : DataGridView
    {
    }

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        ModDataGridView dgv2 = new ModDataGridView();
        pnl.Controls.Add(dgv2); //pnl is a Panel type
        foreach (ModDataGridView item in pnl.Controls)
        {
            txt.AppendText(item.GetType().ToString());
        }

    }
}

An unhandled exception of type

'System.InvalidCastException' occurred in Test.exe

Additional information: Unable to cast object of type 'System.Windows.Forms.DataGridView' to type 'Test.ModDataGridView'.

Upvotes: 0

Views: 329

Answers (2)

Mostafiz
Mostafiz

Reputation: 7352

Use anonymouse type var

foreach (var item in pnl.Controls)
   {
      if(item.GetType() == typeof(ModDataGridView))
       {
          txt.AppendText(item.GetType().ToString());
       }
   }

Upvotes: 0

Jeroen van Langen
Jeroen van Langen

Reputation: 22083

Are you sure you only want to add the ModDataGridView?

You might make use of the OfType<>()

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        ModDataGridView dgv2 = new ModDataGridView();
        pnl.Controls.Add(dgv2); //pnl is a Panel type
        foreach (ModDataGridView item in pnl.Controls.OfType<ModDataGridView>())
        {
            txt.AppendText(item.GetType().ToString());
        }

    }
}

If you want all controls, use a base class:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        ModDataGridView dgv2 = new ModDataGridView();
        pnl.Controls.Add(dgv2); //pnl is a Panel type
        foreach (Control item in pnl.Controls)
        {
            txt.AppendText(item.GetType().ToString());
        }

    }
}

Upvotes: 1

Related Questions