Specified cast is not valid.

Hi experts,

I keep getting the above error each time I click on the edit button

is there anything I can do to recitify this?


here is the code giving error


if (e.Item.ItemType == ListItemType.EditItem)
Line 177:                  {
Line 178:                        DataRowView objDataRowView = (DataRowView)e.Item.DataItem; ===> highlighted
Line 179:                        string currentDeduction = (string)objDataRowView[1].ToString();
Line 180:  


fullcode
is

=================

public void dgCompensation_ItemDataBound(Object Sender, DataGridItemEventArgs e)
            {
   
                  if (e.Item.ItemType == ListItemType.EditItem)
                  {
                        DataRowView objDataRowView = (DataRowView)e.Item.DataItem;
                        string currentDeduction = (string)objDataRowView[2].ToString();
   
                        DropDownList ctlDropDownList = (DropDownList)e.Item.FindControl("DeductDropDownList");
                        //
                        
                        if (ctlDropDownList != null)
                        {
                        
                              ctlDropDownList.Items.Add("E");
                        }
                        //
                        ctlDropDownList.SelectedIndex = ctlDropDownList.Items.IndexOf(ctlDropDownList.Items.FindByText(currentDeduction));
                  }
   
            }
            

===================
SirReadAlotAsked:
Who is Participating?
 
Bob LearnedConnect With a Mentor Commented:
What is e.Item.DataItem.GetType().Name?

Bob
0
 
SirReadAlotAuthor Commented:
sorry, this is a datagrid  edit button.


thanks
0
 
SirReadAlotAuthor Commented:
infact what does the msg mean,?
Specified cast is not valid
0
Free Tool: Port Scanner

Check which ports are open to the outside world. Helps make sure that your firewall rules are working as intended.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 
SirReadAlotAuthor Commented:
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.InvalidCastException: Specified cast is not valid
0
 
SirReadAlotAuthor Commented:
maybe this line needs to be converted to string or int
 DataRowView objDataRowView = (DataRowView)e.Item.DataItem;
0
 
SirReadAlotAuthor Commented:
do i need somthing like this

         DataRowView objDataRowView = (Int64)(DataRowView)e.Item.DataItem;
0
 
shy_talkCommented:
Have no time to try this, but I suppose it would do no good to put brackets round the expression, like the Help files do, e.g.  ((DataRowView)e.Item.DataItem)? Shouldn't work, but who knows?
0
 
vo1dCommented:
about which control do we talk?
0
 
gbzhhuCommented:
What is in your e.Item.DataItem?  can you test it for null first.  Also wrap the code with try catch block which may give more specific error.  The casting looks OK to me, It just depends what you have in your e.Item.DataItem
0
 
vo1dCommented:
DataRowView objDataRowView = (DataRowView)(e.Item.DataItem)
should work.
0
 
gbzhhuCommented:
vo1d

I can't see why brackets around e.Item.DataItem are required
0
 
vo1dCommented:
it seems that the compiler gots problem on cast above 3rd level sometimes.
i got such problems and if you take a look in the DataGridItemEventArgs example, ms is casting with brackets.
0
 
SirReadAlotAuthor Commented:
i will try these tomorrow

thanks
0
 
tpwellsCommented:
you can also try this as well:

 DataRowView objDataRowView =  e.Item.DataItem as DataRowView;

//Then check if objDataRowView is not null before continuing
0
 
tpwellsCommented:
the line "Specified cast is not valid" means that your code is trying to convert, "cast", an object from one type to another and the type that it is getting changed to is not a valid type for the original object. Take if you are changing the string "7" to int that converts fine because "7" is a valid number. However "HELLO7" can not be converted, or cast, is not a valid integer so you get "cast is not valid" errors.

What is stored in e.Item.DataItem? Is it an object that can be converted to a DataRowView?

You have one comment that uses this conversion (Int64)(DataRowView)e.Item.DataItem and tries to save it as a DataRowView. This line makes me think that you have a Int64 number in e.Item.DataItem. If thats the case then you should save it to a variable of type "long".

long myvar = Convert.ToInt64(e.Item.DataItem);

But like gbzhhu says you will want to test to make sure that the DataItem is not null first or you will get the error here as well.
0
 
vo1dCommented:
this is an extract of a msdn example.
as you can see, the cast is in brackets:

void Item_Created(Object sender, DataGridItemEventArgs e)
   {
 
      if (e.Item.ItemType == ListItemType.Item ||
          e.Item.ItemType == ListItemType.AlternatingItem ||
          e.Item.ItemType == ListItemType.SelectedItem ||
          e.Item.ItemType == ListItemType.EditItem)

      {  
         Label1.Text += "<br>" + e.Item.ItemType.ToString() +
                        " - " + ((DataRowView)e.Item.DataItem).Row.ItemArray[1].ToString();  //<-- the cast
      }

      else

      {
         Label1.Text += "<br>" + e.Item.ItemType.ToString();
      }
 
   }
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.