IsNumeric

Discussion in 'ASP .Net' started by sck10, Sep 2, 2006.

  1. sck10

    sck10 Guest

    Hello,

    I am trying to determine if a value is NOT numeric in C#. How do you test
    for "Not IsNumeric"?

    protected void fvFunding_ItemInserting_Validate(object sender,
    FormViewInsertEventArgs e)

    if (e.NewValues["Funding"] != "" && Not IsNumeric(e.NewValues["Funding"]))
    {
    e.Cancel = true;
    this.MessageText.Text += "Annual Rev: Numbers only.<br />";
    }
    }

    I tried the following, but it seems awfully cluncky. Thanks, sck10
    protected void fvFunding_ItemInserting_Validate(object sender,
    FormViewInsertEventArgs e)

    // verify the textbox contains an integer
    if (e.Values["Funding"].ToString() != "")
    {
    try {int i = Convert.ToInt32(e.Values["Funding"].ToString(), 10);}
    catch (FormatException i)
    {
    e.Cancel = true;
    this.lblMessageText.Text += "Annual Rev: Numbers only.<br />";
    }
    } // end if
    }
    sck10, Sep 2, 2006
    #1
    1. Advertising

  2. sck10

    Teemu Keiski Guest

    These might be interesting

    http://www.hanselman.com/blog/ExploringIsNumericForC.aspx
    http://weblogs.asp.net/justin_rogers/archive/2004/03/29/100982.aspx

    --
    Teemu Keiski
    ASP.NET MVP, AspInsider
    Finland, EU
    http://blogs.aspadvice.com/joteke


    "sck10" <> wrote in message
    news:...
    > Hello,
    >
    > I am trying to determine if a value is NOT numeric in C#. How do you test
    > for "Not IsNumeric"?
    >
    > protected void fvFunding_ItemInserting_Validate(object sender,
    > FormViewInsertEventArgs e)
    >
    > if (e.NewValues["Funding"] != "" && Not
    > IsNumeric(e.NewValues["Funding"]))
    > {
    > e.Cancel = true;
    > this.MessageText.Text += "Annual Rev: Numbers only.<br />";
    > }
    > }
    >
    > I tried the following, but it seems awfully cluncky. Thanks, sck10
    > protected void fvFunding_ItemInserting_Validate(object sender,
    > FormViewInsertEventArgs e)
    >
    > // verify the textbox contains an integer
    > if (e.Values["Funding"].ToString() != "")
    > {
    > try {int i = Convert.ToInt32(e.Values["Funding"].ToString(), 10);}
    > catch (FormatException i)
    > {
    > e.Cancel = true;
    > this.lblMessageText.Text += "Annual Rev: Numbers only.<br />";
    > }
    > } // end if
    > }
    >
    >
    Teemu Keiski, Sep 2, 2006
    #2
    1. Advertising

  3. Double.TryParse is a clean way to go. Here's an example where I've wrapped
    it in a C# method:
    http://www.tangiblesoftwaresolutions.com/Articles/CSharp Equivalent to IsNumeric.htm
    --
    David Anton
    www.tangiblesoftwaresolutions.com
    Instant C#: VB to C# converter
    Instant VB: C# to VB converter
    Instant C++: C#/VB to C++ converter
    C# Code Metrics: Quick metrics for C#


    "sck10" wrote:

    > Hello,
    >
    > I am trying to determine if a value is NOT numeric in C#. How do you test
    > for "Not IsNumeric"?
    >
    > protected void fvFunding_ItemInserting_Validate(object sender,
    > FormViewInsertEventArgs e)
    >
    > if (e.NewValues["Funding"] != "" && Not IsNumeric(e.NewValues["Funding"]))
    > {
    > e.Cancel = true;
    > this.MessageText.Text += "Annual Rev: Numbers only.<br />";
    > }
    > }
    >
    > I tried the following, but it seems awfully cluncky. Thanks, sck10
    > protected void fvFunding_ItemInserting_Validate(object sender,
    > FormViewInsertEventArgs e)
    >
    > // verify the textbox contains an integer
    > if (e.Values["Funding"].ToString() != "")
    > {
    > try {int i = Convert.ToInt32(e.Values["Funding"].ToString(), 10);}
    > catch (FormatException i)
    > {
    > e.Cancel = true;
    > this.lblMessageText.Text += "Annual Rev: Numbers only.<br />";
    > }
    > } // end if
    > }
    >
    >
    >
    =?Utf-8?B?RGF2aWQgQW50b24=?=, Sep 2, 2006
    #3
  4. sck10

    sck10 Guest

    Thanks Teemu...


    "Teemu Keiski" <> wrote in message
    news:eQUeD$...
    > These might be interesting
    >
    > http://www.hanselman.com/blog/ExploringIsNumericForC.aspx
    > http://weblogs.asp.net/justin_rogers/archive/2004/03/29/100982.aspx
    >
    > --
    > Teemu Keiski
    > ASP.NET MVP, AspInsider
    > Finland, EU
    > http://blogs.aspadvice.com/joteke
    >
    >
    > "sck10" <> wrote in message
    > news:...
    >> Hello,
    >>
    >> I am trying to determine if a value is NOT numeric in C#. How do you
    >> test for "Not IsNumeric"?
    >>
    >> protected void fvFunding_ItemInserting_Validate(object sender,
    >> FormViewInsertEventArgs e)
    >>
    >> if (e.NewValues["Funding"] != "" && Not
    >> IsNumeric(e.NewValues["Funding"]))
    >> {
    >> e.Cancel = true;
    >> this.MessageText.Text += "Annual Rev: Numbers only.<br />";
    >> }
    >> }
    >>
    >> I tried the following, but it seems awfully cluncky. Thanks, sck10
    >> protected void fvFunding_ItemInserting_Validate(object sender,
    >> FormViewInsertEventArgs e)
    >>
    >> // verify the textbox contains an integer
    >> if (e.Values["Funding"].ToString() != "")
    >> {
    >> try {int i = Convert.ToInt32(e.Values["Funding"].ToString(), 10);}
    >> catch (FormatException i)
    >> {
    >> e.Cancel = true;
    >> this.lblMessageText.Text += "Annual Rev: Numbers only.<br />";
    >> }
    >> } // end if
    >> }
    >>
    >>

    >
    >
    sck10, Sep 2, 2006
    #4
  5. sck10

    sck10 Guest

    Thanks David, I'll give it a shot...


    "David Anton" <> wrote in message
    news:...
    > Double.TryParse is a clean way to go. Here's an example where I've
    > wrapped
    > it in a C# method:
    > http://www.tangiblesoftwaresolutions.com/Articles/CSharp Equivalent to IsNumeric.htm
    > --
    > David Anton
    > www.tangiblesoftwaresolutions.com
    > Instant C#: VB to C# converter
    > Instant VB: C# to VB converter
    > Instant C++: C#/VB to C++ converter
    > C# Code Metrics: Quick metrics for C#
    >
    >
    > "sck10" wrote:
    >
    >> Hello,
    >>
    >> I am trying to determine if a value is NOT numeric in C#. How do you
    >> test
    >> for "Not IsNumeric"?
    >>
    >> protected void fvFunding_ItemInserting_Validate(object sender,
    >> FormViewInsertEventArgs e)
    >>
    >> if (e.NewValues["Funding"] != "" && Not
    >> IsNumeric(e.NewValues["Funding"]))
    >> {
    >> e.Cancel = true;
    >> this.MessageText.Text += "Annual Rev: Numbers only.<br />";
    >> }
    >> }
    >>
    >> I tried the following, but it seems awfully cluncky. Thanks, sck10
    >> protected void fvFunding_ItemInserting_Validate(object sender,
    >> FormViewInsertEventArgs e)
    >>
    >> // verify the textbox contains an integer
    >> if (e.Values["Funding"].ToString() != "")
    >> {
    >> try {int i = Convert.ToInt32(e.Values["Funding"].ToString(), 10);}
    >> catch (FormatException i)
    >> {
    >> e.Cancel = true;
    >> this.lblMessageText.Text += "Annual Rev: Numbers only.<br />";
    >> }
    >> } // end if
    >> }
    >>
    >>
    >>
    sck10, Sep 2, 2006
    #5
  6. Hi sck10,

    It seems you're converting lots of VB.NET code to C# recently, right? I
    recommend you first write the code in VB.NET, and then use Reflector to
    view its disassembled code in C#. Sometimes, VB.NET is using functions from
    Microsoft.VisualBasic.dll, if you do not want to reference this assembly,
    you can also check its disassembled code in C# and try to incorporate it
    into your code.

    Regarding this question, please feel free to post here if you need anything
    else.


    Sincerely,
    Walter Wang (, remove 'online.')
    Microsoft Online Community Support

    ==================================================
    Get notification to my posts through email? Please refer to
    http://msdn.microsoft.com/subscriptions/managednewsgroups/default.aspx#notif
    ications.

    Note: The MSDN Managed Newsgroup support offering is for non-urgent issues
    where an initial response from the community or a Microsoft Support
    Engineer within 1 business day is acceptable. Please note that each follow
    up response may take approximately 2 business days as the support
    professional working with you may need further investigation to reach the
    most efficient resolution. The offering is not appropriate for situations
    that require urgent, real-time or phone-based interactions or complex
    project analysis and dump analysis issues. Issues of this nature are best
    handled working with a dedicated Microsoft Support Engineer by contacting
    Microsoft Customer Support Services (CSS) at
    http://msdn.microsoft.com/subscriptions/support/default.aspx.
    ==================================================

    This posting is provided "AS IS" with no warranties, and confers no rights.
    Walter Wang [MSFT], Sep 4, 2006
    #6
  7. sck10

    sck10 Guest

    Yes, Walter, you are right about the conversion. I am trying to learn c#
    and the best way for me is by converting my vb.net applications to c#.

    Anyway, thanks again...


    "Walter Wang [MSFT]" <> wrote in message
    news:...
    > Hi sck10,
    >
    > It seems you're converting lots of VB.NET code to C# recently, right? I
    > recommend you first write the code in VB.NET, and then use Reflector to
    > view its disassembled code in C#. Sometimes, VB.NET is using functions
    > from
    > Microsoft.VisualBasic.dll, if you do not want to reference this assembly,
    > you can also check its disassembled code in C# and try to incorporate it
    > into your code.
    >
    > Regarding this question, please feel free to post here if you need
    > anything
    > else.
    >
    >
    > Sincerely,
    > Walter Wang (, remove 'online.')
    > Microsoft Online Community Support
    >
    > ==================================================
    > Get notification to my posts through email? Please refer to
    > http://msdn.microsoft.com/subscriptions/managednewsgroups/default.aspx#notif
    > ications.
    >
    > Note: The MSDN Managed Newsgroup support offering is for non-urgent issues
    > where an initial response from the community or a Microsoft Support
    > Engineer within 1 business day is acceptable. Please note that each follow
    > up response may take approximately 2 business days as the support
    > professional working with you may need further investigation to reach the
    > most efficient resolution. The offering is not appropriate for situations
    > that require urgent, real-time or phone-based interactions or complex
    > project analysis and dump analysis issues. Issues of this nature are best
    > handled working with a dedicated Microsoft Support Engineer by contacting
    > Microsoft Customer Support Services (CSS) at
    > http://msdn.microsoft.com/subscriptions/support/default.aspx.
    > ==================================================
    >
    > This posting is provided "AS IS" with no warranties, and confers no
    > rights.
    >
    sck10, Sep 4, 2006
    #7
  8. sck10

    sck10 Guest

    Hi Walter,

    I just downloaded the Reflector tool. Can you point me to where I would
    find IsNumeric or IsDate so I could see how it converts to c#?

    Thanks again, sck10



    "Walter Wang [MSFT]" <> wrote in message
    news:...
    > Hi sck10,
    >
    > It seems you're converting lots of VB.NET code to C# recently, right? I
    > recommend you first write the code in VB.NET, and then use Reflector to
    > view its disassembled code in C#. Sometimes, VB.NET is using functions
    > from
    > Microsoft.VisualBasic.dll, if you do not want to reference this assembly,
    > you can also check its disassembled code in C# and try to incorporate it
    > into your code.
    >
    > Regarding this question, please feel free to post here if you need
    > anything
    > else.
    >
    >
    > Sincerely,
    > Walter Wang (, remove 'online.')
    > Microsoft Online Community Support
    >
    > ==================================================
    > Get notification to my posts through email? Please refer to
    > http://msdn.microsoft.com/subscriptions/managednewsgroups/default.aspx#notif
    > ications.
    >
    > Note: The MSDN Managed Newsgroup support offering is for non-urgent issues
    > where an initial response from the community or a Microsoft Support
    > Engineer within 1 business day is acceptable. Please note that each follow
    > up response may take approximately 2 business days as the support
    > professional working with you may need further investigation to reach the
    > most efficient resolution. The offering is not appropriate for situations
    > that require urgent, real-time or phone-based interactions or complex
    > project analysis and dump analysis issues. Issues of this nature are best
    > handled working with a dedicated Microsoft Support Engineer by contacting
    > Microsoft Customer Support Services (CSS) at
    > http://msdn.microsoft.com/subscriptions/support/default.aspx.
    > ==================================================
    >
    > This posting is provided "AS IS" with no warranties, and confers no
    > rights.
    >
    sck10, Sep 4, 2006
    #8
  9. Hi sck10,

    Thank you for your quick reply.

    Here's the steps to get the source code of IsNumeric:

    1) Create a simple VB.NET console application, type in following code:

    Sub Main()
    Dim s As String = "1.234"
    If IsNumeric(s) Then
    Console.WriteLine("s is numeric")
    End If
    s = "2006/9/1"
    If IsDate(s) Then
    Console.WriteLine("s is date")
    End If
    End Sub

    2) Build it; in Reflector, open the generated exe; find the Main function,
    double click it to see its disassembled code (make sure you selected "C#"
    in the toolbar combobox):

    [STAThread]
    public static void Main()
    {
    string text1 = "1.234";
    if (Versioned.IsNumeric(text1))
    {
    Console.WriteLine("s is numeric");
    }
    text1 = "2006/9/1";
    if (Information.IsDate(text1))
    {
    Console.WriteLine("s is date");
    }
    }

    3) Click on the "IsNumeric" function to navigate to its source. You will
    learn that it's located in Microsoft.VisualBasic.CompilerServices.Versioned
    as a static method, so you can reference Microsoft.VisualBasic.dll in your
    C# project and use this method directly; or you can write your version of
    IsNumeric use the disassembled code as reference.

    Hope this helps. Please feel free to post here if anything is unclear.

    Regards,
    Walter Wang (, remove 'online.')
    Microsoft Online Community Support

    ==================================================
    When responding to posts, please "Reply to Group" via your newsreader so
    that others may learn and benefit from your issue.
    ==================================================

    This posting is provided "AS IS" with no warranties, and confers no rights.
    Walter Wang [MSFT], Sep 4, 2006
    #9
  10. Hi sck10,

    Another note, if you checked Reflector's "View/Options/Show PDB Symbols"
    and you're disassembling an assembly with full .pdb file, you will see the
    correct variable name:

    [STAThread]
    public static void Main()
    {
    string s = "1.234";
    if (Versioned.IsNumeric(s))
    {
    Console.WriteLine("s is numeric");
    }
    s = "2006/9/1";
    if (Information.IsDate(s))
    {
    Console.WriteLine("s is date");
    }
    }

    Previously I'm not checking that option, so the variable "s" has a generic
    name "text1".


    Regards,
    Walter Wang (, remove 'online.')
    Microsoft Online Community Support

    ==================================================
    When responding to posts, please "Reply to Group" via your newsreader so
    that others may learn and benefit from your issue.
    ==================================================

    This posting is provided "AS IS" with no warranties, and confers no rights.
    Walter Wang [MSFT], Sep 4, 2006
    #10
  11. sck10

    sck10 Guest

    Thanks Walter. I was rummaging around the Reflector tool and came these
    three definitions. The first is from the definition from "Main" that you
    provided. Can you help me with the last two? So my understanding is that I
    can use example #1 for my needs?

    Example #1
    ========
    public static bool IsNumeric(object Expression)
    {
    IConvertible convertible1 = Expression as IConvertible;
    if (convertible1 != null)
    {
    switch (convertible1.GetTypeCode())
    {
    case TypeCode.Boolean:
    return true;

    case TypeCode.Char:
    case TypeCode.String:
    {
    double num1;
    string text1 = convertible1.ToString(null);
    try
    {
    long num2;
    if (Utils.IsHexOrOctValue(text1, ref num2))
    {
    return true;
    }
    }
    catch (FormatException)
    {
    return false;
    }
    return Conversions.TryParseDouble(text1, ref num1);
    }
    case TypeCode.SByte:
    case TypeCode.Byte:
    case TypeCode.Int16:
    case TypeCode.UInt16:
    case TypeCode.Int32:
    case TypeCode.UInt32:
    case TypeCode.Int64:
    case TypeCode.UInt64:
    case TypeCode.Single:
    case TypeCode.Double:
    case TypeCode.Decimal:
    return true;
    }
    }
    return false;
    }


    Example #2
    ========
    internal static bool IsNumeric(StorageType type)
    {
    if (!ExpressionNode.IsFloat(type))
    {
    return ExpressionNode.IsInteger(type);
    }
    return true;
    }



    Example #3
    ========
    public static bool IsNumeric(object Expression)
    {
    double num1;
    IConvertible convertible1 = Expression as IConvertible;
    if (convertible1 == null)
    {
    char[] chArray1 = Expression as char[];
    if (chArray1 != null)
    {
    Expression = new string(chArray1);
    }
    else
    {
    return false;
    }
    }
    TypeCode code1 = convertible1.GetTypeCode();
    if ((code1 != TypeCode.String) && (code1 != TypeCode.Char))
    {
    return Information.IsOldNumericTypeCode(code1);
    }
    string text1 = convertible1.ToString(null);
    try
    {
    long num2;
    if (Utils.IsHexOrOctValue(text1, ref num2))
    {
    return true;
    }
    }
    catch (StackOverflowException exception1)
    {
    throw exception1;
    }
    catch (OutOfMemoryException exception2)
    {
    throw exception2;
    }
    catch (ThreadAbortException exception3)
    {
    throw exception3;
    }
    catch (Exception)
    {
    return false;
    }
    return DoubleType.TryParse(text1, ref num1);
    }




    "Walter Wang [MSFT]" <> wrote in message
    news:...
    > Hi sck10,
    >
    > Thank you for your quick reply.
    >
    > Here's the steps to get the source code of IsNumeric:
    >
    > 1) Create a simple VB.NET console application, type in following code:
    >
    > Sub Main()
    > Dim s As String = "1.234"
    > If IsNumeric(s) Then
    > Console.WriteLine("s is numeric")
    > End If
    > s = "2006/9/1"
    > If IsDate(s) Then
    > Console.WriteLine("s is date")
    > End If
    > End Sub
    >
    > 2) Build it; in Reflector, open the generated exe; find the Main function,
    > double click it to see its disassembled code (make sure you selected "C#"
    > in the toolbar combobox):
    >
    > [STAThread]
    > public static void Main()
    > {
    > string text1 = "1.234";
    > if (Versioned.IsNumeric(text1))
    > {
    > Console.WriteLine("s is numeric");
    > }
    > text1 = "2006/9/1";
    > if (Information.IsDate(text1))
    > {
    > Console.WriteLine("s is date");
    > }
    > }
    >
    > 3) Click on the "IsNumeric" function to navigate to its source. You will
    > learn that it's located in
    > Microsoft.VisualBasic.CompilerServices.Versioned
    > as a static method, so you can reference Microsoft.VisualBasic.dll in your
    > C# project and use this method directly; or you can write your version of
    > IsNumeric use the disassembled code as reference.
    >
    > Hope this helps. Please feel free to post here if anything is unclear.
    >
    > Regards,
    > Walter Wang (, remove 'online.')
    > Microsoft Online Community Support
    >
    > ==================================================
    > When responding to posts, please "Reply to Group" via your newsreader so
    > that others may learn and benefit from your issue.
    > ==================================================
    >
    > This posting is provided "AS IS" with no warranties, and confers no
    > rights.
    >
    sck10, Sep 7, 2006
    #11
  12. Hi sck10,

    Good digging!

    The #2 is from System.Data.ExpressionNode which I think is used to
    determine whether or not a database data type is numeric type. So I think
    it's not applicable here for your requirement.

    #3 is from class Microsoft.VisualBasic.Information; while #1 is from
    Microsoft.VisualBasic.CompilerServices.Versioned. If you look at the logic
    of both methods, they are basically similar here.

    Choose which one is not important here, I think learning the implementation
    detail is the key. Just like other community members contributed, this can
    be done using different ways depending on your requirement. For example,
    the implementation in Microsoft.VisualBasic.dll can treat "100h" as a
    numeric value since it's a notation of hex value in VB; if you need to
    handle "0x100" like in C#, then you need to change the logic too;
    otherwise, you will not correctly recogonize the value.

    If you need to copy the #1 or #3 implemenation to your c# code, then you
    need to also copy the other methods referenced by them such as
    Utils.IsHexOrOctValue. Again, my initial thought of introducing you to the
    Reflector tool to learn the disassembled code is because I think learning
    the code can help you write your own version of IsNumeric in C#.

    Based on your requirement, a Double.TryParse maybe enough, though.

    I hope you can learn something from this post, at least know how to use the
    Reflector tool. I believe you will find it's very useful in your journey of
    working with .NET.



    Regards,
    Walter Wang (, remove 'online.')
    Microsoft Online Community Support

    ==================================================
    When responding to posts, please "Reply to Group" via your newsreader so
    that others may learn and benefit from your issue.
    ==================================================

    This posting is provided "AS IS" with no warranties, and confers no rights.
    Walter Wang [MSFT], Sep 7, 2006
    #12
  13. sck10

    sck10 Guest

    Walter,

    Thank you for the explanation. Yes, this has been very helpful in my
    transition from VB to C#.

    Anyway, all your help is greatly appreciated...

    sck10


    "Walter Wang [MSFT]" <> wrote in message
    news:...
    > Hi sck10,
    >
    > Good digging!
    >
    > The #2 is from System.Data.ExpressionNode which I think is used to
    > determine whether or not a database data type is numeric type. So I think
    > it's not applicable here for your requirement.
    >
    > #3 is from class Microsoft.VisualBasic.Information; while #1 is from
    > Microsoft.VisualBasic.CompilerServices.Versioned. If you look at the logic
    > of both methods, they are basically similar here.
    >
    > Choose which one is not important here, I think learning the
    > implementation
    > detail is the key. Just like other community members contributed, this can
    > be done using different ways depending on your requirement. For example,
    > the implementation in Microsoft.VisualBasic.dll can treat "100h" as a
    > numeric value since it's a notation of hex value in VB; if you need to
    > handle "0x100" like in C#, then you need to change the logic too;
    > otherwise, you will not correctly recogonize the value.
    >
    > If you need to copy the #1 or #3 implemenation to your c# code, then you
    > need to also copy the other methods referenced by them such as
    > Utils.IsHexOrOctValue. Again, my initial thought of introducing you to the
    > Reflector tool to learn the disassembled code is because I think learning
    > the code can help you write your own version of IsNumeric in C#.
    >
    > Based on your requirement, a Double.TryParse maybe enough, though.
    >
    > I hope you can learn something from this post, at least know how to use
    > the
    > Reflector tool. I believe you will find it's very useful in your journey
    > of
    > working with .NET.
    >
    >
    >
    > Regards,
    > Walter Wang (, remove 'online.')
    > Microsoft Online Community Support
    >
    > ==================================================
    > When responding to posts, please "Reply to Group" via your newsreader so
    > that others may learn and benefit from your issue.
    > ==================================================
    >
    > This posting is provided "AS IS" with no warranties, and confers no
    > rights.
    >
    sck10, Sep 7, 2006
    #13
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Stephan Bour

    IsNumeric C# equivalent

    Stephan Bour, Nov 5, 2003, in forum: ASP .Net
    Replies:
    12
    Views:
    243,903
    daniefvh
    Jan 26, 2012
  2. martin
    Replies:
    3
    Views:
    10,594
    Kevin Spencer
    Jul 19, 2004
  3. =?Utf-8?B?TXJNaWtl?=

    IsNumeric Function

    =?Utf-8?B?TXJNaWtl?=, Nov 29, 2004, in forum: ASP .Net
    Replies:
    5
    Views:
    4,840
    Dan Bass
    Nov 29, 2004
  4. David Lozzi

    Name 'IsNumeric' is not declared???

    David Lozzi, Dec 6, 2004, in forum: ASP .Net
    Replies:
    4
    Views:
    4,425
    David Lozzi
    Dec 7, 2004
  5. Steve Kershaw

    Is there any IsNumeric in C#?

    Steve Kershaw, Nov 3, 2005, in forum: ASP .Net
    Replies:
    10
    Views:
    78,486
    Bill.Kanzaki
    Feb 3, 2012
Loading...

Share This Page