Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsFree MagazinesWhite PapersSubmit Content
Discussion GroupsASP.NETWindows FormsLanguages.NET FrameworkVisual Studio.NET
Articles.NET FrameworkASP.NETToolsWindows Forms
.NET DirectoryOpen Source ProjectsUser GroupsWeb Resources
Related Topics
Visual Basic 6SQL ServerMS AccessOther DB ProductsMS Server ProductsMore Topics ...

.NET Forum / ASP.NET / General / February 2008

Tip: Looking for answers? Try searching our database.

Update and Insert problems in ListView

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
shapper - 11 Feb 2008 00:14 GMT
Hello,

I created a ListView with a LinqDataSource and a DataPager. I have two
problems:

1. When I insert a record I get the following error:

   LinqDataSource 'ldsTags' has no values to insert. Check that the
'values' dictionary contains values.

2. When I update a record the value is updated but if I click the
browser's Refresh button immediately after I click the Update button I
get the following error:

   Row not found or changed.

I have been all weekend trying to solve these problems but I can't
find a way.

Could someone, please, help me out?

I am posting all my code.

Thank You,

Miguel

ASPX

<%@ Page Language="VB" AutoEventWireup="false"
CodeFile="ListViewRuntime.aspx.vb"
 Inherits="ListViewRuntime" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://
www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
 <title>List View Runtime</title>
</head>
<body>
 <form id="fListViewRuntime" runat="server">
   <asp:PlaceHolder ID="phListViewRuntime" runat="server"></
asp:PlaceHolder>
 </form>
</body>
</html>

ASPX.VB

Public Enum TemplateType
 AlternatingItemTemplate
 EditItemTemplate
 EmptyDataTemplate
 EmptyItemTemplate
 GroupSeparatorTemplate
 GroupTemplate
 InsertItemTemplate
 ItemSeparatorTemplate
 ItemTemplate
 LayoutTemplate
 SelectedItemTemplate
End Enum

Partial Class ListViewRuntime
   Inherits System.Web.UI.Page

 Protected WithEvents ldsTags As New LinqDataSource
 Protected WithEvents lvTags As New ListView

 Protected Sub Page_Init(ByVal sender As Object, ByVal e As
EventArgs) Handles Me.Init

   phListViewRuntime.Controls.Add(ldsTags)
   phListViewRuntime.Controls.Add(lvTags)

 End Sub

 Private Sub ldsTags_Init(ByVal sender As Object, ByVal e As
EventArgs) Handles ldsTags.Init

   With ldsTags
     .ContextTypeName = "CodeDataContext"
     .EnableDelete = True
     .EnableInsert = True
     .EnableUpdate = True
     .ID = "ldsTags"
     .TableName = "Tags"
   End With

 End Sub

 Private Sub ldsTags_Updating(ByVal sender As Object, ByVal e As
LinqDataSourceUpdateEventArgs) Handles ldsTags.Updating

   Dim tag As Tag = CType(e.NewObject, Tag)
   Dim tb As TextBox = CType(Code.Base.Common.FindControl(lvTags,
"updatetext"), TextBox)
   tag.Text = tb.Text

 End Sub

 Private Sub ldsTags_Inserting(ByVal sender As Object, ByVal e As
LinqDataSourceInsertEventArgs) Handles ldsTags.Inserting

   Dim tag As Tag = CType(e.NewObject, Tag)
   Dim tb As TextBox = CType(Code.Base.Common.FindControl(lvTags,
"inserttext"), TextBox)
   tag.Text = tb.Text

 End Sub

 Private Sub lvTags_Init(ByVal sender As Object, ByVal e As
EventArgs) Handles lvTags.Init

   With lvTags
     .DataKeyNames = New String() {"TagID"}
     .DataSourceID = "ldsTags"
     .ID = "lvTags"
     .InsertItemPosition = InsertItemPosition.FirstItem
   End With

   With lvTags
     .AlternatingItemTemplate = New
Template(TemplateType.AlternatingItemTemplate)
     .LayoutTemplate = New Template(TemplateType.LayoutTemplate)
     .InsertItemTemplate = New
Template(TemplateType.InsertItemTemplate)
     .SelectedItemTemplate = New
Template(TemplateType.SelectedItemTemplate)
     .EmptyDataTemplate = New
Template(TemplateType.EmptyDataTemplate)
     .EditItemTemplate = New Template(TemplateType.EditItemTemplate)
     .ItemTemplate = New Template(TemplateType.ItemTemplate)
   End With

 End Sub

End Class

Public Class Template
 Implements ITemplate

 Private _Type As TemplateType
 Public Property Type() As TemplateType
   Get
     Return _Type
   End Get
   Set(ByVal value As TemplateType)
     _Type = value
   End Set
 End Property

 Public Sub New(ByVal type As TemplateType)
   Me.Type = type
 End Sub

 Public Sub InstantiateIn(ByVal container As Control) Implements
ITemplate.InstantiateIn

   ' Select template type
   Select Case Me.Type

     Case TemplateType.AlternatingItemTemplate
       ItemTemplate(container)

     Case TemplateType.LayoutTemplate
       LayoutTemplate(container)

     Case TemplateType.ItemTemplate
       ItemTemplate(container)

     Case TemplateType.SelectedItemTemplate
       ItemTemplate(container)

     Case TemplateType.EmptyDataTemplate

     Case TemplateType.EditItemTemplate
       EditItemTemplate(container)

     Case TemplateType.InsertItemTemplate
       InsertItemTemplate(container)

   End Select

 End Sub

 Private Sub LayoutTemplate(ByVal container As Control)

   Dim table As New HtmlGenericControl("table")

   Dim header As New HtmlGenericControl("thead")
   table.Controls.Add(header)

   Dim headerrow As New HtmlGenericControl("tr")
   header.Controls.Add(headerrow)

   Dim text As New HtmlTableCell("th")
   text.InnerHtml = "Tag"
   headerrow.Controls.Add(text)

   Dim command As New HtmlTableCell("th")
   command.InnerHtml = "Command"
   headerrow.Controls.Add(command)

   Dim body As New HtmlGenericControl("tbody")
   body.ID = "itemPlaceholder"
   table.Controls.Add(body)

   Dim footer As New HtmlGenericControl("tfoot")
   table.Controls.Add(footer)

   Dim footerrow As New HtmlGenericControl("tr")
   footer.Controls.Add(footerrow)

   Dim pagercell As New HtmlTableCell("th")
   pagercell.ColSpan = 2
   footerrow.Controls.Add(pagercell)

   Dim pager As New DataPager
   footerrow.Controls.Add(pager)

   Dim field As New NextPreviousPagerField
   With field
     .ButtonType = ButtonType.Button
     .ShowFirstPageButton = True
     .ShowLastPageButton = True
   End With
   pager.Fields.Add(field)

   container.Controls.Add(table)

 End Sub

 Private Sub ItemTemplate(ByVal container As Control)

   Dim item As New HtmlTableRow

   Dim tag As New HtmlTableCell
   item.Cells.Add(tag)

   Dim command As New HtmlTableCell
   item.Cells.Add(command)

   Dim delete As New Button
   delete.ID = "delete"
   delete.Text = "Delete"
   delete.CommandName = "Delete"
   command.Controls.Add(delete)

   Dim edit As New Button
   edit.ID = "edit"
   edit.Text = "Edit"
   edit.CommandName = "Edit"
   command.Controls.Add(edit)

   Dim text As New Literal
   text.ID = "text"
   tag.Controls.Add(text)
   AddHandler text.DataBinding, AddressOf text_DataBinding

   container.Controls.Add(item)

 End Sub

 Private Sub InsertItemTemplate(ByVal container As Control)

   Dim item As New HtmlTableRow

   Dim tag As New HtmlTableCell
   item.Cells.Add(tag)

   Dim command As New HtmlTableCell
   item.Cells.Add(command)

   Dim insert As New Button
   insert.ID = "insert"
   insert.Text = "Insert"
   insert.CommandName = "Insert"
   command.Controls.Add(insert)

   Dim cancel As New Button
   cancel.ID = "cancel"
   cancel.Text = "Cancel"
   cancel.CommandName = "Cancel"
   command.Controls.Add(cancel)

   Dim inserttext As New TextBox
   inserttext.ID = "inserttext"
   tag.Controls.Add(inserttext)
   AddHandler inserttext.DataBinding, AddressOf
inserttext_DataBinding

   container.Controls.Add(item)

 End Sub

 Private Sub EditItemTemplate(ByVal container As Control)

   Dim item As New HtmlTableRow

   Dim tag As New HtmlTableCell
   item.Cells.Add(tag)

   Dim command As New HtmlTableCell
   item.Cells.Add(command)

   Dim update As New Button
   update.ID = "update"
   update.Text = "Update"
   update.CommandName = "Update"
   command.Controls.Add(update)

   Dim cancel As New Button
   cancel.ID = "cancel"
   cancel.Text = "Cancel"
   cancel.CommandName = "Cancel"
   command.Controls.Add(cancel)

   Dim updatetext As New TextBox
   updatetext.ID = "updatetext"
   tag.Controls.Add(updatetext)
   AddHandler updatetext.DataBinding, AddressOf
updatetext_DataBinding

   container.Controls.Add(item)

 End Sub

 Private Sub text_DataBinding(ByVal sender As Object, ByVal e As
EventArgs)
   Dim text As Literal = CType(sender, Literal)
   Dim lvdiContainer As ListViewDataItem =
CType(text.NamingContainer, ListViewDataItem)
   text.Text = DataBinder.Eval(lvdiContainer.DataItem, "Text")
 End Sub

 Private Sub inserttext_DataBinding(ByVal sender As Object, ByVal e
As EventArgs)
   Dim inserttext As TextBox = CType(sender, TextBox)
   Dim lvdiContainer As ListViewDataItem =
CType(inserttext.NamingContainer, ListViewDataItem)
   inserttext.Text = DataBinder.Eval(lvdiContainer.DataItem, "Text")
 End Sub

 Private Sub updatetext_DataBinding(ByVal sender As Object, ByVal e
As EventArgs)
   Dim updatetext As TextBox = CType(sender, TextBox)
   Dim lvdiContainer As ListViewDataItem =
CType(updatetext.NamingContainer, ListViewDataItem)
   updatetext.Text = DataBinder.Eval(lvdiContainer.DataItem, "Text")
 End Sub

End Class

SQL code to create Tags table

create table dbo.Tags
(
 TagID uniqueidentifier not null
   default NewID()
   constraint PK_Tag primary key clustered,
 [Text] nvarchar(100) not null
)
shapper - 12 Feb 2008 00:46 GMT
> Hello,
>
[quoted text clipped - 358 lines]
>   [Text] nvarchar(100) not null
> )

Hello,

I was able to solve the first problem using the following:

 Private Sub ldsTags_Updating(ByVal sender As Object, ByVal e As
LinqDataSourceUpdateEventArgs) Handles ldsTags.Updating
   Dim tag As Tag = CType(e.NewObject, Tag)
   tag.Text = "Testing Updating"
 End Sub

 Private Sub ldsTags_Inserting(ByVal sender As Object, ByVal e As
LinqDataSourceInsertEventArgs) Handles ldsTags.Inserting
   Dim tag As Tag = CType(e.NewObject, Tag)
   tag.Text = "Testing Inserting"
 End Sub

 Protected Sub lvTags_ItemInserting(ByVal sender As Object, ByVal e
As ListViewInsertEventArgs) Handles lvTags.ItemInserting
   e.Values("Text") = ""
 End Sub

 Protected Sub lvTags_ItemUpdating(ByVal sender As Object, ByVal e As
ListViewUpdateEventArgs) Handles lvTags.ItemUpdating
   e.NewValues("Text") = ""
 End Sub

It works but it also works the following way:

 Protected Sub lvTags_ItemInserting(ByVal sender As Object, ByVal e
As ListViewInsertEventArgs) Handles lvTags.ItemInserting
   e.Values("Text") = "Testing Inserting"
 End Sub

 Protected Sub lvTags_ItemUpdating(ByVal sender As Object, ByVal e As
ListViewUpdateEventArgs) Handles lvTags.ItemUpdating
   e.NewValues("Text") = "Testing Updating"
 End Sub

The question that remains is why do I need to define the values in
ListView events when the ListView is connected to a LinqDataSource?

I was following this article in MSDN:

http://msdn2.microsoft.com/en-us/library/bb514963.aspx

Am I doing something wrong?

I would like to understand this.

Thanks,

Miguel

Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.