Friday, December 31, 2010

Finds a Control recursively in Asp.net

On one of my project i need to Find the controls till get the result control so i have built the code like this...

Below is Method Definition :

/// <summary>
/// Finds a Control recursively. Note finds the first match and exists
/// </summary>
/// <param name="ContainerCtl"></param>
/// <param name="IdToFind"></param>
/// <returns></returns>
public static Control FindControlRecursive(Control Root, string Id)
{
string str =string.Empty;
if (Root.ID == Id)
return Root;
foreach (Control Ctl in Root.Controls)
{
Control FoundCtl = FindControlRecursive(Ctl, Id);
if (FoundCtl != null)
{
switch (Id)
{
case "hdnProductId":
staticProductId = ((System.Web.UI.HtmlControls.HtmlInputHidden)FoundCtl).Value;
break;
case "hdnProductName":
staticProductName = ((System.Web.UI.HtmlControls.HtmlInputHidden)FoundCtl).Value;
break;
}
break;
}
}
return null;
}

Below is Method Definition in GIF Format :


Below is how to call that method:-

FindControlRecursive(this.Page.Master, "hdnProductId");
FindControlRecursive(this.Page.Master, "hdnProductName");

Below is how to call that method in Gif Format:-

Wednesday, December 29, 2010

Convert month number to month name in sql

In this blog I will explain you how to convert month number to month name in sql. To explain it I have used

SELECT DATENAME( MONTH , DATEADD( MONTH , @MONTHNUMBER , 0 ) - 1 ).Below is the code snippet:


DECLARE @MONTHNUMBER INT

SET @MONTHNUMBER=1

SELECT DATENAME( MONTH , DATEADD( MONTH , @MONTHNUMBER , 0 ) - 1 ) AS [MONTHNAME]

-OUTPUT


MONTHNAME

------------------------------

January

DECLARE @MONTHNUMBER INT


SET @MONTHNUMBER=12

SELECT DATENAME( MONTH , DATEADD( MONTH , @MONTHNUMBER , 0 ) - 1 ) AS [MONTHNAME]

--OUTPUT


MONTHNAME

------------------------------

December



2 ).Below is the code snippet:

SELECT CONVERT(VARCHAR(3), DATENAME(MM, CreatedDate_ColumnName), 100)

Monday, December 27, 2010

Clear Controls in Asp.Net

Main Function to Read All controls in do action :-



Call the Method by this way. here in my first line this is multiview id i want to clear all controls under multiview, and on the second one all controls available in the page..

Tuesday, December 21, 2010

Distinct in XSLT

This Example Use for sort the year in xslt for this we need to get unique year id i.e. in xslt generic-id bases we can trace unique here example below:----

Test XML Feed Here:--
<state id="26179" status="Approved" golive="Wednesday, December 22, 2010" created="Wednesday, December 22, 2010" golivetime="9:00:00 AM" createdtime="9:42:11 AM" creator="Indigo Consulting">
<elements state="26179" parent="0">
<element id="97398" position="1" type="Custom">
<content>
<day>6</day>
<month>February</month>
<year>1996</year>
<title>testing first new2</title>
<historyimage />
</content>
</element>
<element id="97399" position="1" type="Custom">
<content>
<day>4</day>
<month>February</month>
<year>1996</year>
<title>testing first similar new2</title>
<historyimage />
</content>
</element>
<element id="97403" position="1" type="Custom">
<content>
<day>4</day>
<month>October</month>
<year>2012</year>
<title>testing first new5</title>
<historyimage />
</content>
</element>
</elements>
</state>

XSL Content:-
-----------
<xsl:key name="distinctYear" match="state/elements/element[@type = 'Custom']/content" use="./year"></xsl:key>

---Under Applytemplate section--------------
<xsl:for-each select="state/elements/element[@type='Custom']/content[generate-id(key('distinctYear', ./year)) = generate-id()]">
<xsl:sort select="year"/>
<li>
<a href="#{year}">
<xsl:value-of select="year" />
</a>
</li>
</xsl:for-each>

Sunday, December 19, 2010

ASP.NET 2.0 MasterPages and FindControl()

Argh. I'm going through an older application and replacing a somewhat complex scheme of user control templating with Master Pages today. For the most part this has been going real well until I hit a page that that relies on page inheritance where there's a common page base class that needs to have access to the controls on the page.

ASP.NET has never made this exactly easy, because the base class doesn't allow you access to the controls from the lower level as ASP.NET adds the properties higher up in the hierarchy. In the past I've been working around this by adding properties for the controls to the base class and then overriding these properties, but in ASP.NET 2.0 the control definitions are auto-generate with no chance to override the control definitions. The only workaround has been using FindControl() and dynamically retrieve the control definitions.

And this is where things get a bit tricky with MasterPages. The problem is that when you use MasterPages the page hierarchy drastically changes. Where a simple this.FindControl() used to give you a control instance you now have to drill into the container hierarchy pretty deeply just to get to the content container.

protected Label lblError = null;

protected DataGrid dgItemList = null;

protected void AssignControls()

{

this.lblError = this.FindControl("lblError") as Label;

this.dgItemList = this.FindControl("dgItemList") as DataGrid;

}

you now have to drill into the containership with code like this:

protected void AssignControls()

{

this.lblError = this.Master.FindControl("Content").FindControl("lblError") as Label;

this.dgItemList = this.Master.FindControl("Content").FindControl("dgItemList") as DataGrid;

}
Image Is below:-


This isn't so bad, except when you're trying to figure out how to get to your controls.

It really seems lame that Microsoft hasn't added a recursive FindControl() method to the Control class that drills into child containers. While this certainly isn't optimal in terms of performance it sure would make life a lot easier in a lot of situations, and this surely is one of them.

Not exactly rocket science to create a method that does this:

/// <summary>
/// Finds a Control recursively. Note finds the first match and exists
/// </summary>
/// <param name="ContainerCtl"></param>
/// <param name="IdToFind"></param>
/// <returns></returns>

public static Control FindControlRecursive(Control Root, string Id)

{

if (Root.ID == Id)

return Root;

foreach (Control Ctl in Root.Controls)

{

Control FoundCtl = FindControlRecursive(Ctl, Id);

if (FoundCtl != null)

return FoundCtl;

}

return null;

}

with this the code becomes:

/// <summary>
/// Assigns controls from the subclassed control to this instance so
/// we always can access the controls in our base class.
/// </summary>

protected void AssignControls()

{

this.lblError = wwWebUtils.FindControlRecursive(this.Master,"lblError") as Label;

this.dgItemList = wwWebUtils.FindControlRecursive(this.Master, "dgItemList") as DataGrid;

}


Image Is below:-




Although this is easier, I suspect it's better to do the explicit thing if that option is available to you as it probably has better performance. Also I suspect Microsoft didn't include this sort of a function in ASP.NET natively because there's potential ambiguity here – there could be more than one control Id that matches a name.

Tuesday, December 14, 2010

Read XML File Node Wise using with xml DocumentElement And display on label


XMl FILE Strecture
<?xml version="1.0" encoding="utf-8" ?>
<adminModules>
<Module id="1" parentid="0" url="javascript:void(0);" title="Locator" real="false" />
</adminModules>
===================
using System.Xml;
string strFileName = Server.MapPath("~/Modules/ModuleMenu/AdminModules.xml");
XmlDocument oXmlDoc = new XmlDocument();
try
{
oXmlDoc.Load(strFileName);
}
catch (Exception ex)
{
lblMessage.Text ="Error: " + ex.Message;
}
XmlNode oNode = oXmlDoc.DocumentElement;
lblMessage.Text += "Node Name: " + oNode.Name;
XmlNodeList oNodeList = oNode.SelectNodes("/adminModules/Module/@title");
lblMessage.Text += "NodeList count=" + oNodeList.Count;
for (int x = 0; x < oNodeList.Count; x++)
{
lblMessage.Text += "NodeList Item#" + x + " " + oNodeList.Item(x).InnerText;
}

Thursday, December 9, 2010

Split string in xsl/xslt

I have written code here for split the text in xsl. might be this is helpfull to you.
this is a function that split the string and print here..
<xsl:template name="SplitText">
<xsl:param name="inputString"/>
<xsl:param name="delimiter"/>
<xsl:choose>
<xsl:when test="contains($inputString, $delimiter)">
<xsl:value-of select="substring-before($inputString,$delimiter)"/>
<xsl:text disable-output-escaping = "no"> </xsl:text>
<xsl:call-template name="SplitText">
<xsl:with-param name="inputString" select="substring-after($inputString,$delimiter)"/>
<xsl:with-param name="delimiter" select="$delimiter"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:if test="$inputString != ''">
<xsl:value-of select="$inputString"/>
</xsl:if>
</xsl:otherwise>
</xsl:choose>
</xsl:template>


Here i have call the parent method with two parameters
1. Input string (Full string)
2. Delimiter (Split by char string)

In My example i have pass varModuleId that is some number with are separated by comma, which i need to split and use in code might be this will helpful to all
==================================

<xsl:call-template name="SplitText">
<xsl:with-param name="inputString" select="$varModuleId"/>
<xsl:with-param name="delimiter">,</xsl:with-param>
<!--<xsl:with-param name="delimiter" select="$delimiter"/>-->
</xsl:call-template>

Replace String with space in Xsl/Xslt

Replace Method for Replace contents,

<xsl:template name="replaceCharsInString">
<xsl:param name="stringIn"/>
<xsl:param name="charsIn"/>
<xsl:param name="charsOut"/>
<xsl:choose>
<xsl:when test="contains($stringIn,$charsIn)">
<xsl:value-of select="concat(substring-before($stringIn,$charsIn),$charsOut)"/>
<xsl:call-template name="replaceCharsInString">
<xsl:with-param name="stringIn" select="substring-after($stringIn,$charsIn)"/>
<xsl:with-param name="charsIn" select="$charsIn"/>
<xsl:with-param name="charsOut" select="$charsOut"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$stringIn"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>


Below code for call the replace method and provided by three parameters
1. Full String
2. Replace text (charIn)
3 Replace from (charOut)
In my example i have used amp; i.e. & to replace with '' i.e. space for your reference code is here.

=========================
<xsl:variable name="myString" select="page/meta/sharefeed"/>
<xsl:variable name="myNewString">
<xsl:call-template name="replaceCharsInString">
<xsl:with-param name="stringIn" select="string($myString)"/>
<xsl:with-param name="charsIn" select="'amp;'"/>
<xsl:with-param name="charsOut" select="''"/>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="myNewRealString" select="string($myNewString)"/>