För tillfället har jag lös det genom en datagrid. Men det är inte säkert att jag kommer att kunna använda den.
Varje support ärende har en flagga, den beror på var i supportkedjan ett ärende befinner sig. Om flagga = 4 så befinner sig ärendet i sista steget i kedjan och därför dyker 4:a länkar upp. Om flagga=1 så syns bara en länk osv.
Då vill jag att man ska kunna klicka på ärendenamnet exempelvis "Kan inte spara sidan".
Då ska det dyka upp länkar en nivå ner så man kan titta på det dokument som hör till steget. Under nivån måste därför vara dynamisk.
Vet inte hur jag ska lösa detta i asp.net. Lager?
Kan man fylla lager med data från databasen som hör till resp. ärende. Om man klickar på länken så viks de ut och länken under "flyter" ner?
Hmm, fick jag till det där? Hoppas ni förstår vad jag menar...
Du kan ju om du vill skapa <span> som du redan från början "fyller på" med den data som hör till. Sen kan du ändra dess "display"-attribut till "block" tror jag att det är så "puttar" den ner all annan info...Det är DHTML-varianten...
...men varför kan du inte använda dig av vanliga postbacks?
Om din data tex. ligger i en "DataList" så kan du ju använda "SelectedItemTemplate" för att visa hur "Selected" data ska visas upp.
Du lägger helt enkelt ut rubriken som en "LinkButton" tex vars "Click" du fångar upp. Därefter sätter du DataList.ens "SelectedIndex" till det du klickade på.
Om du behöver mer struktuerade info kan du ju tom. lägga ytterligare en DataList/Repeater i din "SelectedItemTemplate".
jag tror jag vet vad du är ute efter. Du vill alltså ha nån slags trädstruktur, och gruppera datat?. Då ska du göra nästlade Datalists/Repeater/DataGrids.
sub repGrr_ItemDataBound(sender as object, e as RepeaterItemEventArgs) handles repGrr.ItemDataBound
If (e.Item.ItemType = ListItemType.Item) Or (e.Item.ItemType = ListItemType.AlternatingItem) Then
Dim di as dindatakälla = DirectCast(e.Item.DataItem, dindatakälla)
Dim pnl as string = DirectCast(e.Item.FindControl("pnlGrr"), Panel)")).UniqueID.Replace(":", "_")
Dim lb as string = DirectCast(e.Item.FindControl("lbMarker"), Label)")).UniqueID.Replace(":", "_")
Dim hp as HyperLink = DirectCast(e.Item.FindControl("lbMarker"), HyperLink)
with hp
.Text = di.HuvudText
.Attributes.Add("onclick", "ChangePanelState('" + pnl + "', '" + lb + "')")
end with
Dim ph as PlaceHolder = DirectCast(e.Item.FindControl("phLi"), PlaceHolder)
For Each Alternativ As string In delavdindatakällasomhålleralternativen
Dim hpItem as new HyperLink()
with hpItem
.Target = "_blank"
.Text = Alternativ.ItemTitle
.NavigateUrl = Alternativ.ItemLink
end with
ph.Controls.Add(new LiteralControl("<li>"));
ph.Controls.Add(hpItem);
ph.Controls.Add(new LiteralControl("</li>"));
Next
end if
end sub
Tack för hjälpen.. Hann lösa det själv innan... Grym lösning av dig.. Den kom till stor användning! Funkar super, precis vad jag letade efter.
Jag ändrade lite i koden för att få den att fungera.. Vet inte om jag borde ha gjort på nåt annat sätt... Men det funkar iaf
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
If Not IsPostBack Then
BindRepeater()
End If
End Sub
Private Sub BindRepeater()
repGrr.DataSource = GetSupportDataSet()
repGrr.DataBind()
End Sub
Private Sub repGrr_ItemDataBound(ByVal sender As System.Object, ByVal e As RepeaterItemEventArgs) Handles repGrr.ItemDataBound
If (e.Item.ItemType = ListItemType.Item) Or (e.Item.ItemType = ListItemType.AlternatingItem) Then
Dim di As DataRowView
di = e.Item.DataItem
Dim dv As DataView = New DataView(GetSupportDataSet().Tables("support"))
Dim dt As DataTable
'Dim di As New CType(e.Item.DataItem, ds)
'DinDataKälla di = (Dindatakällatyp)e.Item.DataItem;
'HyperLink(hp = CType(e.Item.FindControl("hpGrr"), HyperLink))
'string pnl = ((Panel)e.Item.FindControl("pnlGrr")).UniqueID.Replace(":", "_");
Dim pnl As String = CType(e.Item.FindControl("pnlGrr"), Panel).UniqueID.Replace(":", "_")
'string lb = ((Label)e.Item.FindControl("lbMarker")).UniqueID.Replace(":", "_");
Dim lb As String = CType(e.Item.FindControl("lbMarker"), Label).UniqueID.Replace(":", "_")
Dim hp As HyperLink = CType(e.Item.FindControl("hpGrr"), HyperLink)
hp.Text = di.Item(1)
hp.Attributes.Add("onclick", "ChangePanelState('" + pnl + "', '" + lb + "')")
Dim ph As PlaceHolder = CType(e.Item.FindControl("phLi"), PlaceHolder)
'For Each di In dv
Dim hpItem As New HyperLink
Dim hpItem2 As New HyperLink
Dim flagga As Integer
hpItem.Target = "_blank"
'hpItem.Text = di.Item(0) 'cbs.ItemTitle
flagga = di.Item(3)
Select Case flagga
Case Is < 3
hpItem.Text = "Ej upptagen i supportprocessen"
hpItem.NavigateUrl = "Oversikt.aspx?id=" & di.Item(0) 'cbs.ItemLink
ph.Controls.Add(New LiteralControl("<li>"))
ph.Controls.Add(hpItem)
ph.Controls.Add(New LiteralControl("</li>"))
Case 4
hpItem.Text = "Fas 2, Analys & Felsök"
hpItem.NavigateUrl = "Oversikt.aspx?id=" & di.Item(0) 'cbs.ItemLink
ph.Controls.Add(New LiteralControl("<li>"))
ph.Controls.Add(hpItem)
ph.Controls.Add(New LiteralControl("</li>"))
Case 5
hpItem.Text = "Fas2, Analy & Felsök"
hpItem.NavigateUrl = "Oversikt.aspx?id=" & di.Item(0) 'cbs.ItemLink
ph.Controls.Add(New LiteralControl("<li>"))
ph.Controls.Add(hpItem)
ph.Controls.Add(New LiteralControl("</li>"))
hpItem2.Text = "Fas3, Godkännande av kund"
hpItem2.NavigateUrl = "Oversikt.aspx?id=" & di.Item(0) 'cbs.ItemLink
ph.Controls.Add(New LiteralControl("<li>"))
ph.Controls.Add(hpItem2)
ph.Controls.Add(New LiteralControl("</li>"))
Case Else
hpItem.Text = "Nåt annat"
hpItem2.NavigateUrl = "Oversikt.aspx?id=" & di.Item(0) 'cbs.ItemLink
ph.Controls.Add(New LiteralControl("<li>"))
ph.Controls.Add(hpItem)
ph.Controls.Add(New LiteralControl("</li>"))
End Select
'Next
End If
End Sub
Public Function GetSupportDataSet() As DataSet
Dim ds As New DataSet
Dim cmd As New SqlCommand("select_support", Application("strConn"))
Dim adpt As New SqlDataAdapter(cmd)
Application("strConn").open()
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.Add("@employee_id", SqlDbType.Int, 4).Value = 2
cmd.Parameters.Add("@company_id", SqlDbType.Int, 4).Value = 2
adpt.Fill(ds, "support")
Application("strConn").close()
Return ds
End Function
Bara en lite försköning av koden, du har en massa reperativ kod i din case sats, det fungerar så, men är dålig ur underhålls syfte eftersom man måste ändra på mer än ett ställe, vilket kan leda till att man glömmer att ändra på någotställe och det ställer till problem
Testa att skriva om din case sats till något sånt här:
hpItem.NavigateUrl = "Oversikt.aspx?id=" & di.Item(0) 'cbs.ItemLink
ph.Controls.Add(New LiteralControl("<li>"))
ph.Controls.Add(hpItem)
ph.Controls.Add(New LiteralControl("</li>"))
Select Case flagga
Case Is < 3
hpItem.Text = "Ej upptagen i supportprocessen"
Case 4
hpItem.Text = "Fas 2, Analys & Felsök"
Case 5
.
.
.
Grejjen är juh den att antalet länkar varierar.. Så i steg fyra ska det vara 3 länkar... Då måste jag väl ha 3 olika hpItem..
Därför jag gjort sådär..
Eller kan man ha samma?