HDSoftware Skrevet 21. januar 2009 Del Skrevet 21. januar 2009 Heisan folkens Sett at man har en HTML kontroll, f.eks. ListView, som man har bunnet en LIST, SortedList etc. etc. til. Hvordan skal jeg få tak i recorden som er aktiv for viderebehandling? Jeg har jo følgende metode: public SortedList<DateTime, int> Verdier = new SortedList(DateTime, int)); protected void Page_Load(object sender, EventArgs e) { // Fyll Verdier med data... MinListView.DataSource = Verdier; MinListView.DataBind(); } protected void MinListView_ItemDataBound(object sender, ListViewItemEventArgs e) { if (e.Item.ItemType == ListViewItemType.DataItem) { // Her ønsker jeg å lese ut verdiene i den aktuelle Verdier posten } } Når jeg kjører dette med et breakpoint inne i IF testen så stopper den like mange ganger som det er poster i Verdier. I tillegg så viser debuggeren meg veien frem til den aktuelle posten og jeg kan lese ut, men i design time så er ikke dette tilgjengelig hverken i intellisencen eller for kompillering. Prøvde meg på en CAST, men fikk det ikek til. All hjelp her er hjertelig velkommen.... Lenke til kommentar
HDSoftware Skrevet 21. januar 2009 Forfatter Del Skrevet 21. januar 2009 Har hatt litt progresjon. Fant ut at jeg kunne propertien DataItemIndex ved å caste e.Item gjennom ListViewDataItem. Dermed hadde jeg indexen til recorden i min SortedList. Og det er fint, men nå står jeg ovenfor en større utfordring: I hver Itemtemplate har jeg tenkt å plassere en ny ListView control. Problemet er at det tilsynelatende ikke genereres noe objekt mot "disse" kontrollene. Og det skjønner jeg jo, fordi den blir generert runtime. Derfor er spørsmålet: Hvordan får jeg tak i eventet ItemDataBound for ListView kontrollen som er definert inne i ItemTemplatet? Eksempel på min html kode, veldig forenklet: <asp:ListView ID = "lv" runat="server"> <Layouttemplate> ...div HTML med TABLE... </LayoutTemplate> <ItemTemplate> <tr runat="server"> <asp:ListView ID="InternalList" runat="server"> .. diverse HTML .. </asp:ListView> </tr> </ItemTemplate> </asp:ListView> Fint om noen kan hjelpe meg her Lenke til kommentar
HDSoftware Skrevet 23. januar 2009 Forfatter Del Skrevet 23. januar 2009 Det hadde jo vært utrolig morro om noen kunne svart på dette ;-) Ser jo at mange har vært innom tråden, men ingen har lagt igjen noe. Går jo ut ifra at nivået her på kanalen er høyere en dette ;-) hehe Lenke til kommentar
Bassetassen82 Skrevet 23. januar 2009 Del Skrevet 23. januar 2009 Jeg har desverre drevet altfor lite med web det siste, men prøvde å lage et eksempel her. Dette er mitt første innlegg her så vet ikke helt hvordan det kommer til å se ut med disse kode taggene, men vi prøver =) HTML: <form id="form1" runat="server"> <asp:ListView ID="ListView1" runat="server"> <LayoutTemplate> <table> <tr runat="server" id="itemPlaceholder"> <td>Outer ListView</td> </tr> </table> </LayoutTemplate> <ItemTemplate> <tr> <td><asp:Label ID="Label1" runat="server" Text='<%#Eval("col1") %>'></asp:Label></td> </tr> <tr> <td> <asp:ListView ID="ListView2" runat="server"> <LayoutTemplate> <table> <tr runat="server" id="itemPlaceholder"> <td>Inner ListView</td> </tr> </table> </LayoutTemplate> <ItemTemplate> <tr> <td><asp:Label ID="Label2" runat="server" Text='<%#Eval("col") %>'></asp:Label></td> </tr> <tr> <td><asp:Label ID="Label3" runat="server" Text=""></asp:Label></td> </tr> </ItemTemplate> </asp:ListView> </td> </tr> </ItemTemplate> </asp:ListView> </form> C#: public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { FillOuterListView(); } } private void FillOuterListView() { DataTable dt = new DataTable(); dt.Columns.Add("col1"); DataRow dr1 = dt.NewRow(); dr1["col1"] = "linje 1"; dt.Rows.Add(dr1); DataRow dr2 = dt.NewRow(); dr2["col1"] = "linje 2"; dt.Rows.Add(dr2); ListView1.ItemDataBound += new EventHandler<ListViewItemEventArgs>(ListView1_ItemDataBound); ListView1.DataSource = dt; ListView1.DataBind(); } private void ListView1_ItemDataBound(object sender, ListViewItemEventArgs e) { if (e.Item.ItemType == ListViewItemType.DataItem) { ListView ListView2 = (ListView)e.Item.FindControl("ListView2"); ListView2.ItemDataBound += new EventHandler<ListViewItemEventArgs>(ListView2_ItemDataBound); DataTable dt = new DataTable(); dt.Columns.Add("col"); DataRow dr1 = dt.NewRow(); dr1["col"] = "inner ListView"; dt.Rows.Add(dr1); ListView2.DataSource = dt; ListView2.DataBind(); } } void ListView2_ItemDataBound(object sender, ListViewItemEventArgs e) { if (e.Item.ItemType == ListViewItemType.DataItem) { Label lbl = (Label)e.Item.FindControl("Label3"); lbl.Text = "=)"; } } } Lenke til kommentar
BennyXNO Skrevet 30. januar 2009 Del Skrevet 30. januar 2009 (endret) Du kan sette direkte i aspx siden hvilken metode/funksjon som kalles ved databinding for Listviewkontrollen. Jeg holder på å åpne et gammelt og stoooort prosjekt for å se om jeg ikke har et lite utdrag å vise deg! Edit: Har stort sett gjort dette mot repeatere, men det er jo samme greiene i grunnen! Her har du et eksempel med 3 nivå's databinding. <table cellspacing="0"> <tr class="ListboxTableHeader"> ... </tr> <asp:Repeater ID="Repeater1" Runat="server" OnItemCommand="Central_ItemCommand" OnItemDataBound="Central_ItemDataBound"> <ItemTemplate> ... <asp:repeater id="Repeater2" runat="server" datasource='<%# Container.DataItem.Row.GetChildRows("centralperiod") %>' OnItemCommand="Period_ItemCommand" OnItemCreated="Period_ItemCreated" OnItemDataBound="Period_ItemDataBound"> <ItemTemplate> <asp:repeater id="Repeater3" runat="server" datasource='<%# Container.DataItem.GetChildRows("periodFeeDiscount") %>' OnItemCommand="FeeDiscount_ItemCommand" OnItemCreated="FeeDiscount_ItemCreated" OnItemDataBound="FeeDiscount_ItemDataBound"> <ItemTemplate> </ItemTemplate> </asp:Repeater> </ItemTemplate> </asp:Repeater> </ItemTemplate> </asp:Repeater> </table> Endret 30. januar 2009 av BennyXNO Lenke til kommentar
HDSoftware Skrevet 31. januar 2009 Forfatter Del Skrevet 31. januar 2009 Spennende. Her bruker du med andre ord en metode som returnerer et datasett og det ser jo greit ut. Det jeg sliter litt med derimot er hvordan jeg skal finne rett record i DataBound metodene. Du har jo en metode som er tilknyttet DataBound eventet,men den metoden sender jo ikke noe info om hvor man er i den utenforliggende datakilden. I hvertfall klarer ikek jeg se hvor den ligger. Ser man p åhva VS presenterer i Intellicensen for e.Item. så ser ikke jeg en eneste property elelr metode som henter ut "current record" og da har jeg vanskligheter med å gjøre en spørring i datasettet. Hvordan har du gjot det i disse eventene dine da? Lenke til kommentar
Bassetassen82 Skrevet 31. januar 2009 Del Skrevet 31. januar 2009 I min ListView1_ItemDataBound kan jeg skrive: string col1 = ((DataRowView)((ListViewDataItem)e.Item).DataItem).Row.ItemArray[0].ToString(); og jeg får ut hva som er i datasettets første kolonnen. Har ville jeg fått linje1 første gang ListView1_ItemDataBound ble kjørt og linje2 andre gang den ble kjørt. Hadde jeg hatt flere kolonner i datasettet mitt kunne jeg hentet ut disse ved å sette en annen verdi i ItemArray[x]. Lenke til kommentar
HDSoftware Skrevet 1. februar 2009 Forfatter Del Skrevet 1. februar 2009 Interresant, men det er ikke nok. Jeg må jo ha hele objektet i sin helhet fordi det ligger jo foretningslogikk i hver record. Prøver å få til noe slik: MinKlasse Record = (en eller annen form for CAST)(ListViewDataItem)e.Item.EttEllerAnnet.... Dette må da være mulig Lenke til kommentar
Bassetassen82 Skrevet 3. februar 2009 Del Skrevet 3. februar 2009 Interresant, men det er ikke nok. Jeg må jo ha hele objektet i sin helhet fordi det ligger jo foretningslogikk i hver record. Prøver å få til noe slik:MinKlasse Record = (en eller annen form for CAST)(ListViewDataItem)e.Item.EttEllerAnnet.... Dette må da være mulig Sånn her da: private void ListView1_ItemDataBound(object sender, ListViewItemEventArgs e) { if (e.Item.ItemType == ListViewItemType.DataItem) { TestClass tc = (TestClass)((ListViewDataItem)e.Item).DataItem; } } Lenke til kommentar
HDSoftware Skrevet 4. februar 2009 Forfatter Del Skrevet 4. februar 2009 Javisst for påkker! Så det nå. Det var jo akurat det du sa i forrige post. Sånn går det når man er så oppsatt på at "dette er bare nesten...." osv. Takker for glimrende svar... Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå