webForumDet fria alternativet

Köra funktion i BoundColumn

.NET

7 svar · 225 visningar · startad av Vide

Medlem sedan dec. 19998 577 inlägg
Frågan#1

Detta har jag gjort:
Skapat en DataGrid och bundit den till en view.

Vad vill jag:
Jag vill köra en funktion som jag skapat som skall formatera texten i en av kolumnerna.

Hur gör jag detta?

Mvh, Vide

Medlem sedan apr. 20012 266 inlägg
#2

För att lättast kunna köra funktioner från en datagrid använder du eventet ItemCommand.

private void dgDomains_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
	switch (e.CommandName)
	{
		case "Ditt commandname för din knapp":
			// Anropa funktion
			break;
	}
}
Medlem sedan dec. 19998 577 inlägg
#3

Okej, och hur skulle ett anrop kunna se ut? Jag menar, hur kommer jag åt själva BoundColumn, måste jag skapa en referens till den också, eller kan jag komma åt den via DataGrid?

Medlem sedan apr. 20012 266 inlägg
#4

Variabeln e innehåller informationen om den rad som man klickat på knappen i från. Med detta objekt kan du sedan ändra det mesta. Om du anger exakt eller i princip vad du vill göra så är det lättare att hitta en lösning

Medlem sedan dec. 19998 577 inlägg
#5

Ah, oki.

Okej, skall förklara lite bättre:
Jag har en BoundColumn, i denna (alla poster) vill jag byta ut alla Environment.NewLine mot "<br>", detta med metoden:

public string HTMLNewLine(string strText)
{
  return strText.Replace(Environment.NewLine, "<br/>");
}

Detta skall alltså ske innan det presenteras, utan att klienten skall behöva trycka på en knapp.

Medlem sedan apr. 20012 266 inlägg
#6

Aha, missuppfattade dig...

Då får du i stället använda ItemDataBound.

private void dgDomains_ItemDataBound(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
	e.Item.Cells[kolumnnummer].Text = HTMLNewLine(((DittDataObject)e.Item.DataItem).DinEgenskap);
}

Något sådant, skrev den för hand så kan inte garantera att den funkar.

Medlem sedan dec. 19998 577 inlägg
#7

Får inte till det, får felmeddelandet:
"Object reference not set to an instance of an object."

Kör nu koden:

public void dgGB_ItemDataBound(object source, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
  clsGeneric gen = new clsGeneric();
  e.Item.Cells[ 1 ].Text = gen.HTMLNewLine( ( ( string )e.Item.DataItem ) );
}
Medlem sedan dec. 19998 577 inlägg
#8

Nu har jag löst det.

Såhär ser funktionen ut:

public void dgGB_ItemDataBound(object source, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
  clsGeneric gen = new clsGeneric();
  e.Item.Cells[ 2 ].Text = gen.HTMLNewLine( (string) e.Item.Cells[ 2 ].Text );
}

Tack för hjälpen renholm! :D

619 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
128 ms — deklarationer (db)
0 ms — hämta statistik (cache)
485 ms — hämta tråd, inlägg och bilagor (db)
129 ms — ändringar (db)