Hej på er! Hej Pär, Hej! Hej, Hmm.. Nu kommer jag lite längre i scriptet.. :) Hej, Source för repeater:GridView i en Repeater?
Nu får jag snart spader..
Har tidigare jobbat med ASP och försöker mig nu på ASP.NET VB Style..
Jag vill väldigt gärna peta in en GridView i en Repeater, med olika parametrar till gridviewns datasource för varje ny rad i repeatern...
I Repeaterns datasource finns ett id "Admin_Rights_ID".. Den vill jag få in som en parameter i en datasource som jag lägger in under <ItemTemplate> på repeatern..
Jag lyckas verkligen inte hur jag än vänder och vrider på det! =)
Nån som har nån idé?
Lite förenklat:
<asp:Repeater ID="Repeater1" runat="server" DataSourceID="Admin_Pages_List">
<ItemTemplate>
<asp:SqlDataSource runat="server" ID="SqlDataSource1" ConnectionString="blabla"
ProviderName="System.Data.SqlClient"
SelectCommand="SELECT [UserName], [PermittedBy], [Created] FROM [BW_Admin_Pages_Rights] WHERE ([Admin_Page_ID] = @Admin_Page_ID)">
<SelectParameters>
<asp:Parameter Name="Admin_Page_ID" DefaultValue="1" />
</SelectParameters>
</asp:SqlDataSource>
Sv: GridView i en Repeater?
Det enklaste vore ju ifall du använde dig utav OnItemDatabound-eventet och där binda gridviewens data.
Ett kort exempel (var länge sedan jag skrev vb syntax men jag ska försöka skriva allt korrekt):
<asp:Repeater id="myRepeater" runat="server" OnItemDataBound="myRep_ItemDataBound">
<ItemTemplate>
...
<asp:GridView id="myGridView ... />
</ItemTemplate>
</asp:Repeater>
Sedan så skapar vi OnItemDatabound eventet i codebehind-filen
Protected Sub myRep_ItemDataBound(ByVal sender As Object, ByVal e As RepeaterItemEventArgs)
' Här gör vi en FindControl och försöker hitta myGridView och även typa om den från en Control till en GridView
Dim myGrid As GridView = CType(e.Item.FindControl("myGridView"), GridView)
' Du har nu alla möjligheter att göra vad du vill med din GridView
' Ex. binda datan som du också ska göra.
' Du kan hämta ut datan via e.Item.DataItem(...) för den aktuella raden.
Dim _id As Int32 = e.Item.DataItem("Admin_Page_ID")
myGrid.DataSource = DataHelper.GetSomeDataById(_id) ' din list(a)
myGrid.DataBind()
End Sub
Något likt detta bör fungera.
/m
Sv:GridView i en Repeater?
Tack för ditt tips.. Får det inte att fungera helt dock..
På raden "Dim _id As Int32 = e.Item.DataItem("Admin_Page_ID")" så får jag felet:
System.NullReferenceException: Object variable or With block variable not set.
Antagligen så borde ju felmeddelandet säga mig nåt, men icke.. =)
//PärSv: GridView i en Repeater?
Jag var för snabb när jag skrev, du måste typa om e.Item.DataItem till "din sort".
om du skulle använda en klass vid namn Customer så skulle det se ut ungefär så här:
Dim customer As Customer = CType(e.Item.DataItem, Customer)
' Men antagligen använder du ingen speciell klass och då så kan du använda dig utav
Dim datarow As DbDataRecord = CType(e.Item.DataItem, DbDataRecord)
' Sedan använder du det som datarow("kolumn")
Response.Write(datarow("kolumn"))
Sv:GridView i en Repeater?
Dim myGrid As GridView = CType(e.Item.FindControl("GridView1"), GridView)
Dim datarow As Data.Common.DbDataRecord = CType(e.Item.DataItem, Data.Common.DbDataRecord)
Dim Conn As New System.Data.SqlClient.SqlConnection(...)
Dim ds As New System.Data.DataSet
Dim SqlAdapter As New System.Data.SqlClient.SqlDataAdapter
SqlAdapter.SelectCommand = New System.Data.SqlClient.SqlCommand
With SqlAdapter.SelectCommand
.Connection = (Conn)
.CommandText = "SELECT * FROM BW_Admin_Pages_Rights WHERE Admin_Page_ID = @AdminPageID"
With .Parameters
.Add("@AdminPageID", Data.SqlDbType.Int)
End With
End With
SqlAdapter.SelectCommand.Parameters("@AdminPageID").Value = datarow("Admin_Page_ID")
Nu är det SqlAdapter.SelectCommand.Parameters("@AdminPageID").Value = datarow("Admin_Page_ID")
som får samma fel som tidigare..
:(
Sv: GridView i en Repeater?
Hur ser SQLen ut för din Repeater? Tillhör admin_page_id repeatern eller gridviewen?
/mSv:GridView i en Repeater?
<asp:SqlDataSource ID="Admin_Pages_List" runat="server" ConnectionString="..." ProviderName="System.Data.SqlClient"
SelectCommand="SELECT p.Name, p.URL, p.Description, p.Admin_Page_ID FROM BW_Admin_Pages AS p ORDER BY p.Name">
</asp:SqlDataSource>
Source för GridView:
.CommandText = "SELECT * FROM BW_Admin_Pages_Rights WHERE Admin_Page_ID = @AdminPageID"
With .Parameters
.Add("@AdminPageID", Data.SqlDbType.Int)
End With