ZeUsMedlem sedan nov. 200188 inlägg Tjo!
Jag har ett litet problem som jag inte vet hur jag ska lösa...
Jag vill göra en slags fold out. Som ni ser på länken ovan.. Under aktuella rapporter.
http://hem.hj.se/~dm01asan/xjobb/rapporter.htm
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...
fredrikMedlem sedan dec. 19991 072 inlägg Vet inte om jag är med till 100%...men men...
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".
DinoMedlem sedan sep. 20011 914 inlägg Gjorde en liknade sak för någon vecka sen. Se om du kan få ut något av detta.
<script type="text/javascript" language="javascript">
function ChangePanelState(e1, e2){
var div = document.getElementById(e1);
var lb = document.getElementById(e2);
if(div.style.display == 'none'){
div.style.display = 'block';
lb.innerText = '6';
}else{
div.style.display = 'none'
lb.innerText = '4';
}
}
</script>
<asp:repeater id="repGrr" runat="server">
<headertemplate>
<table align="center" cellspacing="0" cellpadding="3" width="450">
<tr>
<td colspan="2" bgcolor="Orange"><span style="font-size: 16px; font-weight: bold;">Aktuella rapporter</span></td>
</tr>
</headertemplate>
<itemtemplate>
<tr>
<td bgcolor="beige">
<asp:label id="lbMarker" font-name="Webdings" text="4" runat="server" />
<asp:hyperlink id="hpGrr" navigateurl="#" runat="server" />
<asp:panel id="pnlGrr" style="display: none;" runat="server">
<ul>
<asp:placeholder id="phLi" runat="server" />
</ul>
</asp:panel>
</td>
</tr>
</itemtemplate>
<footertemplate>
</table>
</footertemplate>
</asp:repeater>
protected Repeater repGrr;
private void Page_Load(object sender, System.EventArgs e)
{
if(!IsPostBack)
{
BindRepeater();
}
}
private void BindRepeater()
{
repGrr.DataSource = //hämta din datakälla
repGrr.DataBind();
}
private void repGrr_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
DinDataKälla di = (Dindatakällatyp)e.Item.DataItem;
string pnl = ((Panel)e.Item.FindControl("pnlGrr")).UniqueID.Replace(":", "_");
string lb = ((Label)e.Item.FindControl("lbMarker")).UniqueID.Replace(":", "_");
HyperLink hp = (HyperLink)e.Item.FindControl("hpGrr");
hp.Text = di.HuvudText;
hp.Attributes.Add("onclick", "ChangePanelState('" + pnl + "', '" + lb + "')");
PlaceHolder ph = (PlaceHolder)e.Item.FindControl("phLi");
foreach(Aternativ a in dindatakälla)
{
HyperLink hpItem = new HyperLink();
hpItem.Target = "_blank";
hpItem.Text = cbs.ItemTitle;
hpItem.NavigateUrl = cbs.ItemLink;
ph.Controls.Add(new LiteralControl("<li>"));
ph.Controls.Add(hpItem);
ph.Controls.Add(new LiteralControl("</li>"));
}
}
}
ZeUsMedlem sedan nov. 200188 inlägg tackar.. jag ska prova era förslag...
Men jag får inte igång sql servern för tillfället
NöffMedlem sedan nov. 2003569 inlägg 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.
ZeUsMedlem sedan nov. 200188 inlägg Aha, jag ska sätta mig ner och testa imorgon på företaget där vi har vår "riktiga" utvecklingsmiljö... Håller på med exjobbet
ZeUsMedlem sedan nov. 200188 inlägg Jag skulle behöva hjälp att översätta Dinos kod till VB...
hänger inte med på det här:
private void repGrr_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
DinDataKälla di = (Dindatakällatyp)e.Item.DataItem;
string pnl = ((Panel)e.Item.FindControl("pnlGrr")).UniqueID.Replace(":", "_");
string lb = ((Label)e.Item.FindControl("lbMarker")).UniqueID.Replace(":", "_");
HyperLink hp = (HyperLink)e.Item.FindControl("hpGrr");
hp.Text = di.HuvudText;
hp.Attributes.Add("onclick", "ChangePanelState('" + pnl + "', '" + lb + "')");
PlaceHolder ph = (PlaceHolder)e.Item.FindControl("phLi");
foreach(Aternativ a in dindatakälla)
{
HyperLink hpItem = new HyperLink();
hpItem.Target = "_blank";
hpItem.Text = cbs.ItemTitle;
hpItem.NavigateUrl = cbs.ItemLink;
ph.Controls.Add(new LiteralControl("<li>"));
ph.Controls.Add(hpItem);
ph.Controls.Add(new LiteralControl("</li>"));
}
}
}
DinoMedlem sedan sep. 20011 914 inlägg vb.net kod.
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
ZeUsMedlem sedan nov. 200188 inlägg 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
Inte helt klar.. behöver snyggas till lite..
GladhMedlem sedan maj 20012 812 inlägg 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
.
.
.
- Magnus
ZeUsMedlem sedan nov. 200188 inlägg 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?
GladhMedlem sedan maj 20012 812 inlägg Nej du kan inte ha samma. I steg fyra så får du skapa 2 nya länkar och lägga till dem.
Men för de case som ha samma antal, så kan du minimera din.
- Magnus
ZeUsMedlem sedan nov. 200188 inlägg Okej.. Då gör jag det.. Tack för tipset..
Kanske skulle lägga ut
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>"))
I en funktion.. Eller vad tror ni?