HighTechTalks DotNet Forums  

Repeater with nested GridView edit problem

ASP.net Data Grid Control microsoft.public.dotnet.framework.aspnet.datagridcontrol


Discuss Repeater with nested GridView edit problem in the ASP.net Data Grid Control forum.



Reply
 
Thread Tools Search this Thread Display Modes
  #1  
Old   
David
 
Posts: n/a

Default Repeater with nested GridView edit problem - 10-29-2007 , 05:35 AM






Hi All,

I have a repeater control with a nested Gridview and i am having problems
with getting the gridview into edit mode.
I know I have to set the DataKeyNames value to my primary key field within
the datagrid view but as soon as I do this it generates an error and no data
is displayed.
I have tried using the parent primary key field which also doesnt work and
that wouldnt be correct anyway.
If i leave the DataKeyNames blank like the code below then my data is
dispalyed correctly but the edit mode obviously doesnt work because i havent
set the DataKeyNames value.

Thank you for any help recieved.

HTML code:

<asp:Repeater ID="rptPersonParent" runat="server">

<ItemTemplate>

<h2><%#DataBinder.Eval(Container.DataItem, "PersonName")%></h2>


<asp:GridView

ID="gvPersonParent"

runat="server"

AutoGenerateColumns="False"

ShowHeader="True"

OnRowEditing="Edit_Row"

AutoGenerateEditButton="False"

DataSource='<%#
Container.Dataitem.Row.GetChildRows("FK_Test2_EmpL oc_Test1_Person")%>'

DataKeyNames=""

EditRowStyle-BackColor="Yellow" >


<HeaderStyle ForeColor="#CCCCFF" Font-Bold="True"
BackColor="#003399"></HeaderStyle>

<Columns>

<asp:CommandField ShowEditButton="True" />



<asp:TemplateField HeaderText="Arrive">

<EditItemTemplate>

<aspropDownList ID="DropDownList1" runat="server"></aspropDownList>

<asp:Label ID="Label3" runat="server" Text=":"></asp:Label>

<aspropDownList ID="DropDownList2" runat="server"></aspropDownList>

</EditItemTemplate>

<ItemTemplate>

<%#GetTime(DataBinder.Eval(Container.DataItem, "(ArrTime)"))%>

</ItemTemplate>

</asp:TemplateField>

<asp:TemplateField HeaderText="Depart">

<ItemTemplate>

<%#GetTime(DataBinder.Eval(Container.DataItem, "(DepTime)"))%>

</ItemTemplate>

<EditItemTemplate>

<aspropDownList ID="DropDownList3" runat="server"></aspropDownList>

<asp:Label ID="Label4" runat="server" Text=":"></asp:Label>

<aspropDownList ID="DropDownList4" runat="server"></aspropDownList>

</EditItemTemplate>

</asp:TemplateField>

<asp:TemplateField HeaderText="Date">

<ItemTemplate>

<%#GetDate(DataBinder.Eval(Container.DataItem, "(ArrTime)"))%>

</ItemTemplate>

</asp:TemplateField>

<asp:TemplateField HeaderText="Location">

<ItemTemplate>

<%#DataBinder.Eval(Container.DataItem, "(Location)")%>

</ItemTemplate>

</asp:TemplateField>

</Columns>

<SelectedRowStyle ForeColor="#CCFF99" Font-Bold="True"
BackColor="#009999"></SelectedRowStyle>

<RowStyle ForeColor="#003399" BackColor="White"></RowStyle>

</asp:GridView>

</ItemTemplate>

</asp:Repeater>

Code behind:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Handles Me.Load

Try

Me.divadd.Visible = False

objDataSet = RSKData.CreateDataSet

Me.rptPersonParent.DataSource = objDataSet.Tables("Person")

Me.rptPersonParent.DataBind()

PopulateTable()

Catch ex As Exception

'RSKData.WriteToLog("Page_Load" & ex.Message, 5)

End Try

End Sub



RSKData Class code:



Public Function CreateDataSet()

Try

Dim objThisCommand, objDepthisCommand As New
System.Data.SqlClient.SqlCommand

ConnectToDatabase(objThisCommand)

objDataset.Tables.Add(New System.Data.DataTable("Person"))

objThisCommand.CommandText = "Test1_Select_Person"

objThisCommand.CommandType = System.Data.CommandType.StoredProcedure

objDataAdapter.SelectCommand = objThisCommand

objThisCommand.Parameters.Clear()

objDataAdapter.Fill(objDataset.Tables("Person"))

objThisCommand = New System.Data.SqlClient.SqlCommand

ConnectToDatabase(objThisCommand)

objThisCommand.CommandText = "Test1_Update_Person"

objThisCommand.CommandType = System.Data.CommandType.StoredProcedure

objThisCommand.Parameters.Clear()

objDataAdapter.UpdateCommand = objThisCommand

With objDataAdapter.UpdateCommand

..Parameters.Add("@PersonName", System.Data.SqlDbType.VarChar)

..Parameters.Item("@PersonName").SourceColumn = "PersonName"

..Parameters.Add("@DepID", System.Data.SqlDbType.UniqueIdentifier)

..Parameters.Item("@DepID").SourceColumn = "DepID"

..Parameters.Add("@PersonID", System.Data.SqlDbType.UniqueIdentifier)

..Parameters.Item("@PersonID").SourceColumn = "PersonID"

End With

objThisCommand = New System.Data.SqlClient.SqlCommand

ConnectToDatabase(objThisCommand)

objThisCommand.CommandText = "Test1_Delete_Person"

objThisCommand.CommandType = System.Data.CommandType.StoredProcedure

objThisCommand.Parameters.Clear()

objDataAdapter.DeleteCommand = objThisCommand

With objDataAdapter.DeleteCommand

..Parameters.Add("@PersonID", System.Data.SqlDbType.UniqueIdentifier)

..Parameters.Item("@PersonID").SourceColumn = "PersonID"

End With

objThisCommand = New System.Data.SqlClient.SqlCommand

ConnectToDatabase(objThisCommand)

objThisCommand.CommandText = "Test1_Insert_Person"

objThisCommand.CommandType = System.Data.CommandType.StoredProcedure

objThisCommand.Parameters.Clear()

objDataAdapter.InsertCommand = objThisCommand

With objDataAdapter.InsertCommand

..Parameters.Add("@PersonName", System.Data.SqlDbType.VarChar)

..Parameters.Item("@PersonName").SourceColumn = "PersonName"

..Parameters.Add("@DepID", System.Data.SqlDbType.UniqueIdentifier)

..Parameters.Item("@DepID").SourceColumn = "DepID"

End With

AddHandler objDataAdapter.RowUpdated, New
SqlClient.SqlRowUpdatedEventHandler(AddressOf PersonOnRowUpdated)

AddHandler objDataAdapter.RowUpdating, New
SqlClient.SqlRowUpdatingEventHandler(AddressOf PersonOnRowUpdating)

ConnectToDatabase(objDepthisCommand)

objDataset.Tables.Add(New System.Data.DataTable("Department"))

objDepthisCommand.CommandText = "Test1_Select_Department"

objDepthisCommand.CommandType = System.Data.CommandType.StoredProcedure

objDepDataAdapter.SelectCommand = objDepthisCommand

objDepthisCommand.Parameters.Clear()

objDepDataAdapter.Fill(objDataset.Tables("Departme nt"))



objDataset.Relations.Add("FK_Test1_Person_Test1_De partment",
objDataset.Tables("Department").Columns("DepID"),
objDataset.Tables("Person").Columns("DepID"), True)

objDataset.Relations("FK_Test1_Person_Test1_Depart ment").Nested = True

ConnectToDatabase(obj2ThisCommand)

objDataset.Tables.Add(New System.Data.DataTable("EmpLoc"))

obj2ThisCommand.CommandText = "Test2_Select_EmpLoc"

obj2ThisCommand.CommandType = System.Data.CommandType.StoredProcedure

obj2DataAdapter.SelectCommand = obj2ThisCommand

obj2ThisCommand.Parameters.Clear()

obj2DataAdapter.Fill(objDataset.Tables("EmpLoc"))



obj2ThisCommand.CommandText = "Test2_Insert_EmpLoc"

obj2ThisCommand.CommandType = System.Data.CommandType.StoredProcedure

obj2DataAdapter.InsertCommand = obj2ThisCommand

obj2ThisCommand.Parameters.Clear()

With obj2DataAdapter.InsertCommand

..Parameters.Add("@UID", System.Data.SqlDbType.UniqueIdentifier)

..Parameters.Item("@UID").SourceColumn = "UID"

..Parameters.Add("@PersonID", System.Data.SqlDbType.UniqueIdentifier)

..Parameters.Item("@PersonID").SourceColumn = "PersonID"

..Parameters.Add("@ArrTime", System.Data.SqlDbType.DateTime)

..Parameters.Item("@ArrTime").SourceColumn = "ArrTime"

..Parameters.Add("@DepTime", System.Data.SqlDbType.DateTime)

..Parameters.Item("@DepTime").SourceColumn = "DepTime"

..Parameters.Add("@LocationID", System.Data.SqlDbType.UniqueIdentifier)

..Parameters.Item("@LocationID").SourceColumn = "LocationID"

End With

AddHandler obj2DataAdapter.RowUpdated, New
SqlClient.SqlRowUpdatedEventHandler(AddressOf EmpLocOnRowUpdated)

AddHandler obj2DataAdapter.RowUpdating, New
SqlClient.SqlRowUpdatingEventHandler(AddressOf EmpLocOnRowUpdating)

Dim obj3DataAdapter As New System.Data.SqlClient.SqlDataAdapter

Dim obj3Command As New System.Data.SqlClient.SqlCommand

ConnectToDatabase(obj3Command)

objDataset.Tables.Add(New System.Data.DataTable("Locations"))

obj3Command.CommandText = "Test2_Select_Locations"

obj3Command.CommandType = System.Data.CommandType.StoredProcedure

obj3DataAdapter.SelectCommand = obj3Command

obj3Command.Parameters.Clear()

obj3DataAdapter.Fill(objDataset.Tables("Locations" ))

objDataset.Relations.Add("FK_Test2_EmpLoc_Test1_Pe rson",
objDataset.Tables("Person").Columns("PersonID"),
objDataset.Tables("EmpLoc").Columns("PersonID"), True)

objDataset.Relations("FK_Test2_EmpLoc_Test1_Person ").Nested = True

Return objDataset

' CloseConnection()

Catch ex As Exception

Return Nothing

'WriteToLog("CreateDataSet" & ex.Message, 1)

End Try

End Function



Reply With Quote
  #2  
Old   
Brett
 
Posts: n/a

Default RE: Repeater with nested GridView edit problem - 12-03-2007 , 10:24 AM






David,

Did you ever solve your problem? I'm experiencing nearly the exact same
situation.
I have gridviews nested inside Repeaters; both are tied to
ObjectDataSources. My gridviews will not go into edit mode when nested
inside the repeater (copying the grid and its ODS outside the repeater and
edit works fine). I'm not having the DataKeyNames problem you were.

Thanks,
Brett J.

"David" wrote:

Quote:
Hi All,

I have a repeater control with a nested Gridview and i am having problems
with getting the gridview into edit mode.
I know I have to set the DataKeyNames value to my primary key field within
the datagrid view but as soon as I do this it generates an error and no data
is displayed.
I have tried using the parent primary key field which also doesnt work and
that wouldnt be correct anyway.
If i leave the DataKeyNames blank like the code below then my data is
dispalyed correctly but the edit mode obviously doesnt work because i havent
set the DataKeyNames value.

Thank you for any help recieved.

HTML code:

asp:Repeater ID="rptPersonParent" runat="server"

ItemTemplate

h2><%#DataBinder.Eval(Container.DataItem, "PersonName")%></h2


asp:GridView

ID="gvPersonParent"

runat="server"

AutoGenerateColumns="False"

ShowHeader="True"

OnRowEditing="Edit_Row"

AutoGenerateEditButton="False"

DataSource='<%#
Container.Dataitem.Row.GetChildRows("FK_Test2_EmpL oc_Test1_Person")%>'

DataKeyNames=""

EditRowStyle-BackColor="Yellow"


HeaderStyle ForeColor="#CCCCFF" Font-Bold="True"
BackColor="#003399"></HeaderStyle

Columns

asp:CommandField ShowEditButton="True" /



asp:TemplateField HeaderText="Arrive"

EditItemTemplate

aspropDownList ID="DropDownList1" runat="server"></aspropDownList

asp:Label ID="Label3" runat="server" Text=":"></asp:Label

aspropDownList ID="DropDownList2" runat="server"></aspropDownList

/EditItemTemplate

ItemTemplate

%#GetTime(DataBinder.Eval(Container.DataItem, "(ArrTime)"))%

/ItemTemplate

/asp:TemplateField

asp:TemplateField HeaderText="Depart"

ItemTemplate

%#GetTime(DataBinder.Eval(Container.DataItem, "(DepTime)"))%

/ItemTemplate

EditItemTemplate

aspropDownList ID="DropDownList3" runat="server"></aspropDownList

asp:Label ID="Label4" runat="server" Text=":"></asp:Label

aspropDownList ID="DropDownList4" runat="server"></aspropDownList

/EditItemTemplate

/asp:TemplateField

asp:TemplateField HeaderText="Date"

ItemTemplate

%#GetDate(DataBinder.Eval(Container.DataItem, "(ArrTime)"))%

/ItemTemplate

/asp:TemplateField

asp:TemplateField HeaderText="Location"

ItemTemplate

%#DataBinder.Eval(Container.DataItem, "(Location)")%

/ItemTemplate

/asp:TemplateField

/Columns

SelectedRowStyle ForeColor="#CCFF99" Font-Bold="True"
BackColor="#009999"></SelectedRowStyle

RowStyle ForeColor="#003399" BackColor="White"></RowStyle

/asp:GridView

/ItemTemplate

/asp:Repeater

Code behind:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Handles Me.Load

Try

Me.divadd.Visible = False

objDataSet = RSKData.CreateDataSet

Me.rptPersonParent.DataSource = objDataSet.Tables("Person")

Me.rptPersonParent.DataBind()

PopulateTable()

Catch ex As Exception

'RSKData.WriteToLog("Page_Load" & ex.Message, 5)

End Try

End Sub



RSKData Class code:



Public Function CreateDataSet()

Try

Dim objThisCommand, objDepthisCommand As New
System.Data.SqlClient.SqlCommand

ConnectToDatabase(objThisCommand)

objDataset.Tables.Add(New System.Data.DataTable("Person"))

objThisCommand.CommandText = "Test1_Select_Person"

objThisCommand.CommandType = System.Data.CommandType.StoredProcedure

objDataAdapter.SelectCommand = objThisCommand

objThisCommand.Parameters.Clear()

objDataAdapter.Fill(objDataset.Tables("Person"))

objThisCommand = New System.Data.SqlClient.SqlCommand

ConnectToDatabase(objThisCommand)

objThisCommand.CommandText = "Test1_Update_Person"

objThisCommand.CommandType = System.Data.CommandType.StoredProcedure

objThisCommand.Parameters.Clear()

objDataAdapter.UpdateCommand = objThisCommand

With objDataAdapter.UpdateCommand

..Parameters.Add("@PersonName", System.Data.SqlDbType.VarChar)

..Parameters.Item("@PersonName").SourceColumn = "PersonName"

..Parameters.Add("@DepID", System.Data.SqlDbType.UniqueIdentifier)

..Parameters.Item("@DepID").SourceColumn = "DepID"

..Parameters.Add("@PersonID", System.Data.SqlDbType.UniqueIdentifier)

..Parameters.Item("@PersonID").SourceColumn = "PersonID"

End With

objThisCommand = New System.Data.SqlClient.SqlCommand

ConnectToDatabase(objThisCommand)

objThisCommand.CommandText = "Test1_Delete_Person"

objThisCommand.CommandType = System.Data.CommandType.StoredProcedure

objThisCommand.Parameters.Clear()

objDataAdapter.DeleteCommand = objThisCommand

With objDataAdapter.DeleteCommand

..Parameters.Add("@PersonID", System.Data.SqlDbType.UniqueIdentifier)

..Parameters.Item("@PersonID").SourceColumn = "PersonID"

End With

objThisCommand = New System.Data.SqlClient.SqlCommand

ConnectToDatabase(objThisCommand)

objThisCommand.CommandText = "Test1_Insert_Person"

objThisCommand.CommandType = System.Data.CommandType.StoredProcedure

objThisCommand.Parameters.Clear()

objDataAdapter.InsertCommand = objThisCommand

With objDataAdapter.InsertCommand

..Parameters.Add("@PersonName", System.Data.SqlDbType.VarChar)

..Parameters.Item("@PersonName").SourceColumn = "PersonName"

..Parameters.Add("@DepID", System.Data.SqlDbType.UniqueIdentifier)

..Parameters.Item("@DepID").SourceColumn = "DepID"

End With

AddHandler objDataAdapter.RowUpdated, New
SqlClient.SqlRowUpdatedEventHandler(AddressOf PersonOnRowUpdated)

AddHandler objDataAdapter.RowUpdating, New
SqlClient.SqlRowUpdatingEventHandler(AddressOf PersonOnRowUpdating)

ConnectToDatabase(objDepthisCommand)

objDataset.Tables.Add(New System.Data.DataTable("Department"))

objDepthisCommand.CommandText = "Test1_Select_Department"

objDepthisCommand.CommandType = System.Data.CommandType.StoredProcedure

objDepDataAdapter.SelectCommand = objDepthisCommand

objDepthisCommand.Parameters.Clear()

objDepDataAdapter.Fill(objDataset.Tables("Departme nt"))



objDataset.Relations.Add("FK_Test1_Person_Test1_De partment",
objDataset.Tables("Department").Columns("DepID"),
objDataset.Tables("Person").Columns("DepID"), True)

objDataset.Relations("FK_Test1_Person_Test1_Depart ment").Nested = True

ConnectToDatabase(obj2ThisCommand)

objDataset.Tables.Add(New System.Data.DataTable("EmpLoc"))

obj2ThisCommand.CommandText = "Test2_Select_EmpLoc"

obj2ThisCommand.CommandType = System.Data.CommandType.StoredProcedure

obj2DataAdapter.SelectCommand = obj2ThisCommand

obj2ThisCommand.Parameters.Clear()

obj2DataAdapter.Fill(objDataset.Tables("EmpLoc"))



obj2ThisCommand.CommandText = "Test2_Insert_EmpLoc"

obj2ThisCommand.CommandType = System.Data.CommandType.StoredProcedure


Reply With Quote
Reply




Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off



Powered by vBulletin Version 3.5.4
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.