I am totally new to asp.net, used to php which is quite straight forward. This is my first asp.net project and it must be over a week now since I have been trying to solve this one problem. I am trying to do an Entity Framework Code 1st system. Now at the stage where I need to set up CRUD proceedures to manipulate the database but I am getting nowhere. When I try to delete I get this error message.
System.InvalidCastException: Unable to cast object of type 'System.Collections.Specialized.OrderedDictionary' to type 'System.IConvertible'.
Line 100: int row = Convert.ToInt32(GridView1.DataKeys[e.RowIndex].Values);
Sometimes when I preview in browser a line of data will be deleted. I do not know how or when.
Here are snippets of my code..
//UI ...
<asp:GridView ID="GridView1" runat="server"
ItemType="TODOLists.Models.Lists"
SelectMethod="GetLists"
GridLines="None"
AutoGenerateColumns="False"
AutoGenerateDeleteButton="True"
OnRowDeleting="DeleteList"
DataKeyNames="ListID"
>
<Columns>
<asp:TemplateField HeaderText="ListID">
<ItemTemplate>
<p style="font-size: medium; font-style: normal">
<%#: Eval ("ListID") %>
</p>
</ItemTemplate>
</asp:TemplateField>
</Columns>
<Columns>
<asp:TemplateField HeaderText="List Name">
<ItemTemplate>
<p style="font-size: medium; font-style: normal">
<a href="/ChosenList.aspx?id=<%#: Eval ("ListID") %>">
<%#: Eval ("ListName") %>
</a>
</p>
</ItemTemplate>
</asp:TemplateField>
</Columns>
<Columns>
<asp:TemplateField HeaderText="Category">
<ItemTemplate>
<p style="font-size: medium; font-style: normal">
<%#: Eval ("CategoryID") %>
</p>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
...
//Code behind ...
//To display data
public IQueryable<Lists> GetLists()
{
var db = new TODOLists.Models.ListItemsContext();
IQueryable<Lists> query = db.Lists;
return query;
}
//To delete a row of data
public void DeleteList(Object sender, GridViewDeleteEventArgs e)
{
int row = Convert.ToInt32(GridView1.DataKeys[e.RowIndex].Values);
var db = new TODOLists.Models.ListItemsContext();
Lists x = db.Lists.Find(row);
db.Lists.Remove(x);
db.SaveChanges();
}
....
//Context Class
using System.Data.Entity;
namespace TODOLists.Models
{
public class ListItemsContext : DbContext
{
public ListItemsContext()
: base("TODOLists")
{
}
public DbSet<Lists> Lists { get; set; }
public DbSet<ListItems> ListItems { get; set; }
public DbSet<Category> Category { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Category>()
.Property(u => u.CategoryName)
.HasColumnName("CatName");
}
}
}