Great. I love to see your progress. Next step is introducing more templates.
A template separates the different concerns of you style sheet. For example you would prefer using a <xsl:apply-templates/> instead of a <xsl:for-each> in the most cases. I did not show it my examles to show the basic ideas. See http://www.w3schools.com/xsl/xsl_apply_templates.asp for more information.
Templates can also be used as functions. I will alter your script to show all concepts:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:udt="DotNetNuke/UserDefinedTable">
<xsl:output omit-xml-declaration = "yes" />
<xsl:template match="/" >
<table >
<tr>
<th/>
<th>Pledged By</th>
<th>Date</th>
<th>Amount</th>
<th>Balance</th>
</tr>
<xsl:apply-templates/>
</table>
</xsl:template>
<xsl:template match="udt:UserDefinedTable/udt:Data">
<tr class="normal">
<!-- Alternate row formatting, position() will work like a row number -->
<xsl:if test ="position() mod 2 =1">
<!-- Attribute will be added to the <tr> tag -->
<xsl:attribute name="style">background-color: aliceblue</xsl:attribute>
</xsl:if>
<!-- END alternate row formatting -->
<td>
<xsl:call-template name="ProvideEditLink"/>
</td>
<td align="right">
<xsl:value-of select="udt:CreatedBy"/>
<br/>
</td>
<td align="right">
<xsl:call-template name="RenderDate">
<xsl:with-param name="Value" select="udt:CreatedAt" />
</xsl:call-template>
<br/>
</td>
<td align="right">
<xsl:value-of select="udt:Pledge"/>
<br/>
</td>
<td align="right">
<!-- Balance will be calculated and the value gets stored inside the variable $balance -->
<xsl:variable name ="balance"
select="sum((.|preceding-sibling::udt:Data)/udt:Target)
-sum((.|preceding-sibling::udt:Data)/udt:Pledge)"/>
<span>
<!-- Conditional formatting, the style attribute will be added to the <span> tag when balance < 0 -->
<xsl:if test ="$balance<0">
<xsl:attribute name="style">color:red; font-weight: bold;</xsl:attribute>
</xsl:if>
<!-- Output $balance -->
<xsl:value-of select="$balance"/>
</span>
<br/>
</td>
</tr>
</xsl:for-each>
<xsl:template name="ProvideEditLink">
<!-- Edit link, udt:EditLink will be missing if user does not have the needed permission -->
<xsl:if test="udt:EditLink">
<a>
<xsl:attribute name="href">
<xsl:value-of select="udt:EditLink" />
</xsl:attribute>
<img border="0" alt="edit">
<xsl:attribute name="src">
<xsl:value-of select="//udt:Context/udt:ApplicationPath"/>/images/edit.gif
</xsl:attribute>
</img>
</a>
</xsl:if>
<!-- END Edit link -->
</xsl:template>
<xsl:template name="RenderDate">
<xsl:param name="Value"/>
<xsl:if test="$Value">
<!--DateTime looks like "2005-12-31T23:59:55.0000000+01:00" -->
<xsl:variable name="Year" select="substring($Value, 1, 4) "/>
<xsl:variable name="Month" select="substring($Value, 6, 2) "/>
<xsl:variable name="Day" select="substring($Value, 9, 2) "/>
<xsl:variable name="Time" select="substring($Value, 12, 8) "/>
<xsl:value-of select ="$Month"/>/<xsl:value-of select ="$Day"/>/<xsl:value-of select ="$Year"/>
</xsl:if>
</xsl:template>
</xsl:stylesheet>