webForumDet fria alternativet

Datalist

41 svar · 704 visningar · startad av icaaq

icaaqMedlem sedan okt. 20005 273 inlägg
#1

Jag har en datalist med en <itemtemplate> där jag loppar ut ett dataset.....men jag får inte ut värdena i mitt dataset, så här ser det ut nu

[red]
<asp:datalist id="DataList1" runat="server" width="100%">
																	<itemtemplate>
																		&middot;[b]<%# DataBinder.Eval(Container.DataItem, "f_answ")%>[/b]</td>
														<tr>
															<td>
																<table class="bar" cellspacing="0">
																	<tr>
																		<td class="bar" width="75%"><img src="images/nocansee.png"></td>
																		<td class="barend"><img src="images/barend.png" align="top"></td>
																	</tr>
																</table>
															</td>
														</tr>
												</itemtemplate> </asp:datalist>[/red]

men jagfårDataBinder.Eval: 'System.Data.DataRowView' does not contain a property with the name f_answ.

hur ska jag göra?

NETworkMedlem sedan juni 20011 732 inlägg
#2

Det verkar som om f_answ inte finns, är du säker på att du skrivit rätt? Tips: för att snabbt kolla vad som finns i ditt dataset och vad de olika kolumnerna heter, släng in det i en ren datagrid.

icaaqMedlem sedan okt. 20005 273 inlägg
#3

Jag binder Datalisten till detta DataSet

[red]
			string sqlAns = "SELECT f_answ pk_id from t_answ where f_que_id = " + Id;
			SqlDataAdapter myDa = new SqlDataAdapter(sqlAns, myConn);
			DataSet myDs = new DataSet();
			myDa.Fill(myDs, "t_answ");[/red]

Så den borde finnas där :)

NETworkMedlem sedan juni 20011 732 inlägg
#4

Hm, och du behöver inte plotta dit ett litet kommatecken mellan f_answ och pk_id i din selectsats då?

icaaqMedlem sedan okt. 20005 273 inlägg
#5

jo.... :r

icaaqMedlem sedan okt. 20005 273 inlägg
#6

Nu vill jag räkna ut procenten på svaren i repeatern men hur ska jag göra då jag har ett fält i databasen som heter f_hits och ett fält som jag skapat i SQL-satsen som heter NoOfAnswers så jag får ut rätt data ur databasen det är bara hur jag ska kunna dela delen på det hela i loopen som är kruxet :OO

Summasummarum så vill jag dela f_hits med NoOfAnswers i en repeater......

mvh icaaq

icaaqMedlem sedan okt. 20005 273 inlägg
#7

Jag testade så här men det blev helt fel

[red]
<%#((Container.DataItem, "f_hits") / (Container.DataItem, "NoOfAnswers"))%>[/red]
icaaqMedlem sedan okt. 20005 273 inlägg
#8

Om inte det går på nått sätt hur ska jag lösa det då? kanske fixa allt i SQL-satsen eller labba med koden i *.cs filen änu mer....

tacksam för alla svar och förslag

mvh icaaq

renholmMedlem sedan apr. 20012 266 inlägg
#9

Borde inte följande funka?

<%# Container.DataItem("f_hits") / Container.DataItem("NoOfAnswers") %>
icaaqMedlem sedan okt. 20005 273 inlägg
#10

Den gnäller att jag inte kan använda / med strings, så hur konverterar jag värdena till int ?

mvj icaaq

PatrikBMedlem sedan mars 20002 836 inlägg
#11

om det vore VB så kan du parsa till int så här:

Int32.Parse(Container.DataItem("f_hits"))

cya,
PatrikB

PatrikBMedlem sedan mars 20002 836 inlägg
#12

eller kanske så här:

Public Function MakePercent(ByVal value As String, ByVal totalValue As String) As String
	Dim intValue As Double = Double.Parse(value)
	Dim intTotalValue As Double = Double.Parse(totalVAlue)

	Dim outPut As String = ((intValue / intTotalValue) * 100).ToString() & " %"

	return outPut
End Function

<redigerat>
redigerade i funktionen ovan från int32 till double (kanske inte ska typa om till integers ;) )
</redigerat>
Funktionen ovan får du lägga i din .aspx sida eller code-behind fil

Anropa den sedan i datalistens itemtemplate (om det är en sådan du använder):

<%# MakePercent(Container.DataItem("f_hits"), Container.DataItem("NoOfAnswers")) %>

om nu båda är av typen string, annars får du ändra i funktionen.

cya,
PatrikB

NETworkMedlem sedan juni 20011 732 inlägg
#13

Den kastar ut strängar så du måste konvertera till en int, kan även göras direkt:

<%# Convert.ToInt32(Container.DataItem("f_hits")) / Convert.ToInt32(Container.DataItem("NoOfAnswers")) %>

Red: Sen får du snygga till det lite, så att du inte får avrundningsfel o sånt naturligtvis!

icaaqMedlem sedan okt. 20005 273 inlägg
#14

Jag gjorde en funktion av det hela

[red]
public string MakePercent(string Hits, string NoOfAnswers)
		{
			string MakePercent = ((Convert.ToInt32(Hits)*100)/ Convert.ToInt32(NoOfAnswers)).ToString();
			return MakePercent;
		}[/red]

Och den fungerar, om jag lägger in värdena för hand....men inte om jag ska lägga in dem med Container.DataItem. Om jag försöker med Container.DataItem("f_hits") så får jag
CS0118: 'System.Web.UI.WebControls.DataListItem.DataItem' denotes a 'property' where a 'method' was expected

Hur ska jag lösa det ?

mvh icaaq

<redigerat>

[red]
<%# MakePercent(Container.DataItem("f_hits"), Container.DataItem("NoOfAnswers"))%>[/red]

Sågör jag när det blir fel</redigerat>

NETworkMedlem sedan juni 20011 732 inlägg
#15

public string MakePercent(object Hits, object NoOfAnswers)
//Sen får du göra dina objects till strängar i koden...

icaaqMedlem sedan okt. 20005 273 inlägg
#16

Nej det blir ju samma fel för det.....hör inte det felet ihop med Container.DataItem ?

Vad har dem för Properties?

icaaqMedlem sedan okt. 20005 273 inlägg
#17

Och när jag svarade på denna så fick jag svaret själv...... nu funkar det :e

NETworkMedlem sedan juni 20011 732 inlägg
#18

Ah, ja det såklart... :)

icaaqMedlem sedan okt. 20005 273 inlägg
#19

Ok nu har jag ett problem igen.
Jag tänkte att jag skulle använda header och footer templates med men då gick jag bet. Hela upplägget ser ut såg ut så här innan ommöbleringen med header och footer....

Först hade jag en Frågan som var en label( den hämtar jag ur en datareader.
Sen loppade jag ut ett DataSet i en ItemTemplate där alla Svarsalternativ fanns.....

Det hade jag fixat så allt funkade. Men så tänkte jag visa totalt antal röster längst ner på pollen, då kom tanken på footer.

Men när jag har gjort så så kunde jag ju inte sätta texten på label(frågan) inne i HeaderTemplate och Totala antalet träffar visas inte heller.......Jag visar lite kod så kanske ni fattar ;)

[red][font=courier][1]
<asp:datalist id="DataList1" runat="server" cssclass="poll" cellpadding="4">
	<headertemplate>
			<span class="underline">Här vill jag visa frågan</span>														
	</headertemplate>
	<ItemTemplate>
				·<asp:linkbutton commandargument='<%#DataBinder.Eval(Container.DataItem, "pk_id", "{0:G}")%>' onclick="vote" runat="server" cssclass="four"><%# DataBinder.Eval(Container.DataItem, "f_answ", "{0:G}") %>:</asp:linkbutton><span class="percent"><%# MakePercent(DataBinder.Eval(Container.DataItem, "f_hits", "{0:G}"), DataBinder.Eval(Container.DataItem, "NoOfAnswers", "{0:G}"))%></span></td>
			<tr>
				<td>
					<table class="bar" cellspacing="0">
						<tr>
							<td class="bar" width="<%# MakePercent(DataBinder.Eval(Container.DataItem, "f_hits", "{0:G}"), DataBinder.Eval(Container.DataItem, "NoOfAnswers", "{0:G}"))%>"><img src="images/nocansee.png"></td>
							<td class="barend"><img src="images/barend.png" align="top"></td>
						</tr>
					</table>
	</ItemTemplate>
	<footertemplate>
		Totalt antal röster:<%# DataBinder.Eval(Container.DataItem, "NoOfAnswers", "{0:G}")%>
	</footertemplate>
	</asp:datalist>[/1][/font][/red]

Så frågorna lyder
1. Hur ska jag få in frågan som jag har i en DataReader, in i headertemplate.
2. Varför visas inte NoOfAnswers

mvh icaaq

NETworkMedlem sedan juni 20011 732 inlägg
#20
  1. Jag har för mig att du kan använda DataList1.Controls[0].Controls[0..1..2 osv] för att komma åt kontrollerna i headern... skriv ut kontrollerna och se vad du hittar.

  2. DataBinder.Eval.osv är ju en loopgrej som bara fungerar i itemtemplate. Du får använda en vanlig kontroll där.

125 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
122 ms — hämta tråd, inlägg och bilagor (db)