.NET 101






.NET is basically an interface for a single programming language. MSIL, However languages can be written to be compliant with MSIL and thus usable with the .NET framework. Thus StringBuilders are available whether you are coding in C#, VB.NET or whatever other languages.




Using System

Most Basic Project setup

            Windows Apps


            Web Apps

            Console Apps

Hello World

            File, New Project, Windows App, save to c:projects

            File, Saveas, Form1.cs to net101.cs

            Properties, text, ‘Hello World’


Using System.Text


            String / StringBuilder

                        Strings are immutable (non appendable) thus very inefficient when there are multiple changes to the value.

                        My habit I’ve tried to develop is anytime I am using += more than once or twice I use a StringBuilder.

Had one program which was parsing, rebuilding and databasing text files that went from 8 hours to 20 seconds from simply switching from string to StringBuilder.


StringBuilder is like stringbuffer in Java


                              string strHello =  "Hello World 111 \n";

                  strHello += "Hello World 222 \n";

                  StringBuilder sbHello = new StringBuilder(); //use intelisense to show you must add system.text first.

                  sbHello.Append("Hello World 333 \n");

                  sbHello.Append("Hello World 444 \n");

      label1.Text = strHello + sbHello.ToString();



            Array / ArrayList

                        I think ArrayList is just simpler. Useful methods and Dynamic Resizing

:Add method so you don’t have to keep track of last index.

:Remove/ RemoveAt / RemoveRange  Method


 Also properties: Count


ArrayList is like a vector in java or redim / preserve (but it does the work)


string[] strStringArrayEx = new String[5];

                  ArrayList alArrayListEx = new ArrayList();


                  strStringArrayEx[1] = "red";


                  strStringArrayEx[2] = "blue";



                  foreach(string test in strStringArrayEx)


                        sbHello.Append(test + " ");



                  foreach(string test in alArrayListEx)






Using System.Web

            Web Controls (except Data grid) and Data Binding

All controls are Server Controls when dropped off the toolbox. This means they are very useful, unless you want to do some client side processing to avoid trips to the server. If this is your desire then you need to use handbuild HTML clientside controls.


All Controls inherit from Control Class (Buttons including regular/radio/checkboxes inherit from ButtonClass which inherits from Control Class.

Basi,c most commonly used Control Class Properites.

Anchor (Anchors when window resized), BackColor, Dock(Docks to edges of window), Enabled, ForeColor, Height, Left, Name, Parent, Right, TabIndex, TabStop, Tag(a spot to store additional data associated with the control, Often used to hold valid or not), Top, Visible, Width


                                    We already did, ok change BackColor, FontSize in properties and in code.

                                    label2.BackColor = "Color.Red";

label2.Font.Italic = true; (doesn’t work not ‘settable’)



                                    Visually change ID, Text, Word Wrap etc..

Warning if you use Multiline = True, then it changes when it renders from an HTML TextBox to a HTML TextArea which changes some of the available events.Specifically maxlength property is inaccessible

1 Server Side control can represent multiple types of HTML objects

If you want to control the length, you must use a javascript functions that catches the keystrokes. To add a clientside event to a server control you must add it into the C# code.

txtDescription.Attributes.Add( "OnKeyUp","checklen()");



                        --Switch to Web Apps

                        Rename webfrom to netwebform.aspx

‘Set as Start Page’.


                        Buttons / ImageButtons / Link Buttons

                                    A link button looks just like a plain old link, but can have server side events



                                    Add radiobuttonlist change id to rblExample

                                    Save copied code from before

ArrayList alArrayListEx = new ArrayList();



                  Add new code

                        rblExample.DataSource = sbHello;




                        ComboBox / DropDowns

                                    Change id to ddlExample

                                    Note AutoPostBack, Items


ddlExample.DataSource = alArrayListEx;



                                    go back and note out DataBinds and add



                        **DataBind must be in !Page.IsPostBack if later events to avoid rebinding everything which clears your values that you think you have.


                        Here is a list of some of the other controls that we won’t be going over today, but are available.

ListBox, ListView, GroupBox/Panel, RichTextBox, StatusBar, ImageList, TabControl, Validators, Calendar





                                    Move above code into function


private void arrayStuff()



Using System.IO


The Base class is the StreamReader, but the functionality of the TextReader and XMLReader are remarkably similar, just obviously for Text and XML.


            Must add System.Text for string builder

            Add function call funcReadFile()

            Create new folder in c drive called ‘data’

            Create text file and save in new folder






private void funcReadFile()


                  StringBuilder sbFile = new StringBuilder();

                  string strTemp;                    

                  TextReader tr = new StreamReader("C:\\\\testing.txt");

                  while (tr.Peek()>-1) //if line exists


                        strTemp = tr.ReadLine();

                        strTemp = strTemp.Replace("E", "East");

                        sbFile.Append(strTemp + "\r\n");



                  TextWriter tw = new StreamWriter("C:\\\\data\\testing2.txt");

                  tw.Write (sbFile.ToString());








Using System.XML



                        Xpath is like a folder system

10 Second intro to Xpath

                        / represents absolute path, // relative path, * wildcard, //@ for attributes, [1], selects first , count( ) returns count, starts-with ( )..


<?xml version='1.0' encoding='ISO-8859-1'?>


<cd country='USA'>

<title>Empire Burlesque</title>

<artist>Bob Dylan</artist>



<cd country='UK'>

<title>Hide your heart</title>

<artist>Bonnie Tyler</artist>



<cd country='USA'>

<title>Greatest Hits</title>

<artist>Dolly Parton</artist>





private void funcXML()


                  string strXML  = "<?xml version='1.0' encoding='ISO-8859-1'?><catalog><cd country='USA'><title>Empire Burlesque</title><artist>Bob Dylan</artist><price>10.90</price></cd><cd country='UK'><title>Hide your heart</title><artist>Bonnie Tyler</artist><price>9.90</price></cd><cd country='USA'><title>Greatest Hits</title><artist>Dolly Parton</artist> <price>9.90</price></cd></catalog>";

                  StringBuilder sbXML = new StringBuilder();

                  XmlDocument oDoc = new XmlDocument();


                  //how we would normally do it. oDoc.Load("c://filename");


                  XmlNodeList oNodes = oDoc.SelectNodes("//cd/artist");

//                XmlNodeList oNodes = oDoc.SelectNodes("/catalog/cd[price=10.90]/price");

//                XmlNodeList oNodes = oDoc.SelectNodes("//cd[starts-with(artist,'Bo')]");

//                XmlNodeList oNodes = oDoc.SelectNodes("//cd[@country='UK']/artist");



                  for(int i=0;i<oNodes.Count;i++)


                        sbXML.Append(oNodes.Item(i).OuterXml + " -<br> " );



                  lblXML.Text = sbXML.ToString();








State / Request / QueryString


Very Similar to ASP

String s = Request.QueryString["Name"];

Getting an item passed through can be grabbed in C# or Javascript. The most common way is to grab in C#

vVariable = Request["Variable "]

then get in javascript alert(‘<%=vVariable%>’)

or you could get directly in javascript


In order to hold a value through multiple postbacks putting an variable in to “ViewState” is often the simplest way to go.

public string vLayerName




                        return (string)ViewState["vLayerName"];




                        ViewState["vLayerName"] = value;



                        in Classic ASP all form values are cleared on submit. In ASP.NET, all form values are maintained in viewstate.

Automatic state management is a feature that enables server controls to re-populate their values on a round trip without requiring you to write any code, but with a price

Viewstate can be controlled at four levels--the machine level, the application level, the page level and the control level


                        Application level state can be controlled through global.asax

                        Session Level state can be controlled using Session[“anyvarname”]






                        Set breakpoint on strScraped = webScraper\

                                    Show step into / step over /step out

                        Show Watch for variable strTemp inside funcReadFile


                        Add Trace.Write(strTemp) as last line inside tr.Peek loop

                        Add Trace=true to html page


                        Other option is to change web config to…

                   <trace enabled="true"/>
                       and look at this page…



                        Old School – add in right after …strTemp.Replace(“W”….



                  Response.Write("we made it here");









More Complex Project Setup

The best architecture for multiple developer .NET projects is utilizing SourceSafe.

On a server you have the original copy of the Project. Whenever you work on the project you check it out and work locally on your machine. (The whole project is running on your machine, not just the file. – Thus you must ‘Get Latest Version’ of the entire project regularly to ensure you have updated code for the pages that you are not checking out.) Then when you are done you check it back in which movse it back to the Server. You can then do a build on this Server to update this server. This server can be your Live Server, in which case you are done….or for an extra layer of comfort, this can be your Dev machine. The Live Server is just like any other machine/user who checks never checks out stuff. Because you can do a ‘Get Latest Version’ of only a few files or do a ‘Get Latest Version’ of the whole project you can very safely update small sections of your website.


One more hint : Don’t start page names with numbers – Confuses C#


                        References/ Web References (add web.mail to windows form)



                        Copy Project

                                    You must use this to move a project, copy and paste in Windows Explorer doesn’t work.

If you are not using SourceSafe this is the simplest way to move files back and forth. However there is no project management. You simply overwrite the Live Server.

                        Bulk Comment/Uncomment

                        Go to Definition / Reference…

                        Region Blocks

                                    # region Mail and IO functions / # endregion


                        Format – Align lefts, Make same size, snap to grid


                        += works in c# and vb.


                        Only significant bug so far: Properties window disappears.






Using System.Net



Must first add label named lblScraper


                        string strScraped;

            strScraped = webScraper();

            lblScraper.Text = strScraped;


private string webScraper()


                  string strURL = "http://www.cuppcondo.com/code";

                  HttpWebRequest HttpWReq = (HttpWebRequest)WebRequest.Create(strURL);

                  HttpWebResponse HttpWResp = (HttpWebResponse)HttpWReq.GetResponse();

                  string stringResult;

                  using (StreamReader sR = new StreamReader(HttpWResp.GetResponseStream()))


                        stringResult = sR.ReadToEnd();


                  }// Insert code that uses the response object.


                  return stringResult;



                        cast( )




create new page/ change ‘set as start page’

Using System.Data / System.Data.SqlClient

            Data Access


                        ADO.NET is very similar looking at first glance to ADO but very different the more your find.

                        Both use the connection and command object, and the recordset is relatively similar to the dataset object. That said…

                        SqlClient is faster than OldDb for SqlServer.


Connection object – very similar to the ADO connection. 99% (I haven’t found the 1% yet) of connection strings work for ADO.NET


The command object is similar but with enhancements. The command object is exposes the Reader object which cannot be directly instantiated. Thus the only way to utilize is through the Reader’s Methods

ExecuteNonQuery (Returns nothing),

ExecuteScalar (returns a single string)

ExecuteReader (a forward-only, read-only DataSet) is through the Command object.

ExecuteXMLReader which returns an XML document


A dataset is a disconnected set of data and can represent tables or multiple tables. It is usually built through the dataAdapter’s object fill method.



                                    Start – create new table tblTest in enterprise manager

                                                Columnname = tblTestID,  data type = uniqueidentifier, is rowGUid yes

                                                tblTestName = varchar, tblTestCol2 = varchar

                                                add in 4 rows, abc, def, ghi, jkl execute to get guids, 111 for each row in col2

Select “select * from table where field = 1”


//string vConnStr1 = ConfigurationSettings.AppSettings.Get("dbUPAA");

                  //SqlConnection vConn1 = new SqlConnection(vConnStr1);


                  ArrayList al = new ArrayList();


                  StringBuilder sbTest = new StringBuilder();

                  SqlConnection myConnection;

                  myConnection = new SqlConnection("server=database;database=petrowebtest;uid=zz;pwd=zzz");



                  string strInsert = "1234";

                  string vSql = "INSERT INTO tblTest(tblTestName) VALUES ('" + strInsert + "')";

                  SqlCommand InsertCommand = new SqlCommand(vSql,myConnection);



                  vSql = "SELECT * FROM tblTest " ;

                  SqlCommand vCommand = new SqlCommand(vSql, myConnection);        

                  SqlDataReader vDr;

                  vDr = vCommand.ExecuteReader();

                  //                while (vDr.Read())

                  //                {

                  //                      sbTest.Append(vDr["tblTestName"] + " ");

                  //                }

                  lblFirstSql.Text = sbTest.ToString();




                        dgExample.DataSource = vDr;                    




//for later                        

//SqlDataReader vDr2;

                        //vDr2 = vCommand.ExecuteReader();

                        //dlExample.DataSource = vDr2;                       









SqlConnection myConnection;

                  myConnection = new SqlConnection("server=database;database=petrowebtest;uid=zz;pwd=zzz");



string vSql2 = "INSERT INTO tblTest(tblTestName) VALUES (@sName)";     

                  SqlCommand InsertCommand2 = new SqlCommand(vSql2,myConnection);

                  SqlParameter paramItemDesc = new SqlParameter("@sName", SqlDbType.VarChar);

                  paramItemDesc.Value = sqlItem;








//                Stored Procedure

                  SqlCommand spCommand = new SqlCommand();

                  spCommand.Connection = myConnection;

                  spCommand.CommandText = "spTblTest";

                  spCommand.CommandType = CommandType.StoredProcedure;


                  SqlParameter spParam = new SqlParameter("@sName", SqlDbType.VarChar);

                  spParam.Value = "blank1";



                  SqlDataReader vDr;

                  vDr = spCommand.ExecuteReader();   


//                SqlDataAdapter da = new SqlDataAdapter();

//                da.SelectCommand = spCommand;

//                da.TableMappings.Add("Table","zz");

//                DataSet ds = new DataSet();

//                da.Fill(ds);                 


                  dgExample.DataSource = vDr;









                        DropDown/Radio etc…





                        Data Grid

                                    Note out while loop

                  dgExample.DataSource = vDr;


                  mess with datagrid properties.

                        AutoGenerateColumns, alternatingitems/bgcolor, header style etc…

                        Autogenerate does one simple thing – creates a bound column for each field.


**DataBind must be in !Page.IsPostBack if later events to avoid rebinding everything which clears your values that you think you have.


                                    AutoGenerateColumns vs. Bound Columns

I went out and bought Transact SQL when I started working with .NET. Because auto generated columns are so much simpler. So far 80% of the time I’ve thought I needed to do Bound Columns I’ve been able to achieve the same in SQL utilizing stuff like substring/case/datepart/etc…

Change autogenerate columns to false and add HTML code


                                                            <asp:BoundColumn DataField="tblTestName"></asp:BoundColumn>

                                                            <asp:BoundColumn DataField="tblTestCol2">

                                                                        <ItemStyle BackColor="Red"></ItemStyle>




                                    Rerun and show that we lost stuff (headers etc… )This is why I like to do things in SQL


                                    TemplateColumns – Use for special formatting (some can be done with bound columns) ie. Combine fields (can be done in Sql) add in string text (can be done in SQL)  add in whole table inside of a column.

<asp:TemplateColumn >

                                                            <ItemTemplate><%# DataBinder.Eval(Container.DataItem, "tblTestName")%> --- <%# DataBinder.Eval(Container.DataItem, "tblTestCol2")%>




                        Formatting for datagrid, BackColor, Font, CellPadding, CellSpacing, Wdth, Horizontal Align.

                                    Styles – HeaderStyle, FooterSytle, ItemStyle, AlternatingItemStyle

                                    It is possible to specify these bound columns programmatically, but it’s ugly and ton’s of code.


                                    Formatting for bound columns, HeaderText, FooterText, HeaderStyle/FooterStyle/ItemStyle, DataFormatString





Slightly faster than DataGrid, but requires hand building of columns. And not quite as flexible in formatting


                                    Add in design view new datalist and change id to dlExample

                                    Add in HMTL

                                                <asp:DataList id="dlExample" style="Z-INDEX: 104; LEFT: 524px; POSITION: absolute; TOP: 150px" runat="server" Height="61" Width="233">

                                                            <ItemTemplate>Item Template Example</ItemTemplate>


                                                                        <%# DataBinder.Eval(Container.DataItem, "tblTestName")%>


                                                                        <%# DataBinder.Eval(Container.DataItem, "tblTestCol2")%>





Add second dataareader to is not postback section



                        dgExample.DataSource = vDr;                    




                        SqlDataReader vDr2;

                        vDr2 = vCommand.ExecuteReader();

                        dlExample.DataSource = vDr2;                   





More Data


                        Disconnected like Recordset, but can hold multiple Tables.


                        Used to populate DataSet

            Stored Procedure


                        Use to properly input Text field data into databases.





More DataGrid

            Paging and Sorting


                        OnEditCommand, OnItemCommand






public void DataGrid1_SelectedIndexChanged(object sender, DataGridCommandEventArgs e)


                  strLaunchURL = "true";

                  string strEndURL = e.Item.Cells[2].Text;

                  strURL = "http://www.cuppcondo.com/" + strEndURL;

                  //Response.Write("<script>top.returnValue='" + e.Item.Cells[1].Text + "'</script>");



            public void dg_Edit(object sender, DataGridCommandEventArgs e)


                  dgExample.EditItemIndex = e.Item.ItemIndex;

                  this.BindGridNow( );

                  //this.DataBind( );



            public void  BindGridNow()


                  SqlConnection myConnection;

                  myConnection = new SqlConnection("server=database;database=petrowebtest;uid=zz;pwd=zzz");



                  //Binding to Datagrid from Dataset

                  string strSql = "select tblTestName as Name, tblTestCol2 as 'Column 2' from tblTest";

                  DataSet dsLayers = new DataSet();

                  SqlDataAdapter daLayers = new SqlDataAdapter(strSql,myConnection);


                  dgExample.DataSource = dsLayers;





<script language=javascript>


                        if ('<%=strLaunchURL%>' == "true")







                        <form id="FirstDaySql2" method="post" runat="server">

                                    <asp:DataGrid id="dgExample" AutoGenerateColumns="False" style="Z-INDEX: 101; LEFT: 183px; POSITION: absolute; TOP: 141px" OnEditCommand="dg_Edit"  OnItemCommand="DataGrid1_SelectedIndexChanged" runat="server">


                                                            <asp:ButtonColumn ButtonType="PushButton" Text="testurl" HeaderText="Details"></asp:ButtonColumn>

                                                            <asp:EditCommandColumn EditText="edit"  CancelText="cance"></asp:EditCommandColumn>

                                                            <asp:BoundColumn DataField="Name"></asp:BoundColumn>






Using System.ServiceProcess





Create Web Service Project Net101Service

Unnote Webmethod code as directed



            public string HelloWorld()


                  return "Hello World";






Create new file in our Webforms


Add web reference http://localhost/Net101Service/Service1.asmx


Add Code

      localhost.Service1 webServ = new localhost.Service1();

webServ.Url = "http://localhost/Net101Service/Service1.asmx";


Click on URL and should see Tab “Service 1 Web Service”

Click HelloWorld and Invoke and you should see XML run.


Feel free to change Namespace to something like….



change Service1.asmx code to


            public string HelloWorld(string a)


                  return "I updated database with " + a ;



add lblService to ClientService

add code to ClientService

lblService.Text = webServ.HelloWorld("bbb");


You must build Service1 and updateReference on clientService



If you add public class clsName : System.Web.Services.WebService

Then you can access application, session, user and content objects


You can also call webservcies synchronously or asynchronously








      public class Service1 : System.Web.Services.WebService



            public void WSWriteToMaptester(string sSql)


SqlConnection myConnection = new SqlConnection("server=database;database=petroweb;uid=zz;pwd=zzz");


                  SqlCommand cmd = new SqlCommand(sSql.ToString(), myConnection);







localhost.Service1 RS1 = new localhost.Service1();

      Class1 clsWrite = new Class1();

      clsWrite.RS1.Url = "http://216.87.66.ZZZ/newMaptesterService/Service1.asmx";

      strInsertSQL = "INSERT INTO maptester2(timedate,) VALUES ('" + str + "')";








Event Handling

            Server Side

                        DataGrid – Auto

                        Most Common double click button/control and eventfunction automatically build, simply add event code

                        Label1.text = TextBox1.Text.ToString()


AutoCreation of this code

In web form designer generated code…oninit

this.Button1.Click += new System.EventHandler(this.Button1_Click);

In class delclarations             

                  protected System.Web.UI.WebControls.Button Button1;


private void Button1_Click(object sender, System.EventArgs e)

                  {     }



To color row based on output

public void MyDataGrid_ItemDataBound(object sender, DataGridItemEventArgs e)


                  //not header or footer rows..

if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)


                        if (DataBinder.Eval(e.Item.DataItem,"Completion_Date","{0}") != "")


                              //((TableCell)e.Item.FindControl("tblCellStatus")).CssClass = "tdNotRunning";

                              e.Item.BackColor = Color.Tan;





            change Boolean to show x

string vmap  = DataBinder.Eval(e.Item.DataItem, "map_failed", "{0}");        

            if(vmap == "1")

                  ((Label) e.Item.FindControl("labelMapDown")).Text = "X";





                        AutoPostback Controls                        Non-Auto Postback Controls

                                    Button                                                  Checkbox (list)

                                    DataGrid                                              Listbox

                                    Image                                                   RadioButton(list)

                                    Link                                                     DropDownList

                                    DataList                                               TextBox



            Client Side



sLoader =  "javascript:window.close();";

            Function Loader() { <% = sLoader %>//window.returnValue = '<% =sLoader %>' // alert(" in sloader zoomgoto.aspx " + '<% = sLoader %>') }

<BODY onload="javascript:Loader()">



            Client and Server

                        Do normal Server and add to code behind

                        txtItemDes.Attributes.Add( "OnKeyUp","checklen()");

then add script code something like this
function checklen()   

{ x = document.recordUpdate.txtItemDes.value.length;

if (x >= 490)

{ alert("The maximum character length for this field is 500 characters."); }





Go to Definition Go to Reference

Start pages with numbers – dashes

Format align lefts, etc..

Wincv.exe – in c:\program files\microsoft visual studio .NET\FrameworkSDK\Bin


To deal with AppSettings

            WebConfig or MachineConfig

                        <add key = “sqldata” value =”server=zeus;database=dbname;uid=sa;pwd=zzz;”/>


            in aspx page

                        str Conn = ConfigurationSettings.AppSettings[“sqldata”];


            In global.asax, or Machine.config, web.config you can setup things like

                        Custom errors, httpruntime maxrequestlength=”4096”, pages enableviewstate=”true”

                        Trace enabled=”true”





                        C# public class Foo : Bar {

                        VB Public Class Foo : Inherits Bar


            A few Other C# objects worth remembering





int intstartDays = Convert.ToInt16(txtNumDays.Text);


            decmyData5perc = Math.Round(decmyData5perc * 100, 2);


DateTime dtToday  = DateTime.Now;

            DateTime dtLast = dtToday.AddDays(intDays);

            string strLast = dtLast.ToShortDateString();   


switch (FirstName) {

  case "John" :



  case "Paul" :



  case "Ringo" :







                        while / do





                        try/ Catch

                        try {

    // Code that throws exceptions

} catch(OverflowException e) {

    // Catch a specific exception

} catch(Exception e) {

    // Catch the generic exceptions

} finally {

    // Execute some cleanup code







Practice Exercise for them to do.


    1. Create 3 strings –Math, Physics, English
    2. Use StringBuilder to create another sbClass – History
    3. Combine into a single string strAll;
    4. Create string array strArrClasses and split strAll into it.
    5. Create RadioButtonList rblClasses and bind alClasses to it.
    6. Add button btnGo and grab selected radio rblClasses.SelectedItem.ToString(); (watch postback)
    7. Insert new row into Database with
    8. Create a DataGrid dgClasses
    9. Get Datareader from table tblTest where  tblTestName is in our previous arrayList and bind to dgClasses
    10. Format Header (fix names in SQL) and make every other row grey and the header row black with white lettering.

    11. Extra for fast kids, add a dropdownlist above radio buttons called ddlDate
    12. Create a string array with max of 3 ;s
    13. Assign index 0 today’s date (hint: DateTime object) – index 1 Tomorrow’s date, index 2 Yesterday’s date.
    14. Bind array to ddl and when Go is clicked add this item as second Column.




Code for Practice 1


using System;

using System.Collections;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Web;

using System.Web.SessionState;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.HtmlControls;

using System.Text;

using System.Text.RegularExpressions;

using System.Data.SqlClient;



namespace Net101Web


      /// <summary>

      /// Summary description for Practice1.

      /// </summary>

      public class Practice1 : System.Web.UI.Page


            protected System.Web.UI.WebControls.Button btnGo;

            protected System.Web.UI.WebControls.Label lblError;

            protected System.Web.UI.WebControls.DataGrid dgClasses;

            protected System.Web.UI.WebControls.DropDownList ddlDate;

            protected System.Web.UI.WebControls.RadioButtonList rblClasses;


            private void Page_Load(object sender, System.EventArgs e)


                  // Put user code to initialize the page here

//                      1.    Create 3 strings –Math, Physics, English

//                      2.    Use StringBuilder to create another sbClass – History

//                      3.    Combine into a single string strAll;

//                      4.    Create string array strArrClasses and split strAll into it.

//                      5.    Create RadioButtonList rblClasses and bind alClasses to it.

//                      6.    Add button btnGo and grab selected radio rblClasses.SelectedItem.ToString();

//                      7.    Insert new row into Database with

//                      8.    Create a DataGrid dgClasses

//                      9.    Get Datareader from table tblTest where  tblTestName is in our previous arrayList and bind to dgClasses

//                      10.   Format Header (fix names in SQL) and make every other row grey and the header row black with white lettering.


//                      11.   Extra for fast kids, add a dropdownlist above radio buttons called ddlDate

//                      12.   Create a string array with max of 3 ;s

//                      13.   Assign index 0 today’s date (hint: DateTime object) – index 1 Tomorrow’s date, index 2 Yesterday’s date.

//                      14.   Bind array to ddl and when Go is clicked add this item as second Column.





                        string strE = "English";

                        string strM = "Math";

                        string strP = "Physics";

                        StringBuilder sbClass = new StringBuilder();


                        string strAll = strE  + "," + strM + "," +  strP + "," + sbClass.ToString();

                        string[] strArrClasses;

                        strArrClasses = strAll.Split(',');

                        rblClasses.DataSource = strArrClasses;




                        string[] strArrDate = new string[3];

                        strArrDate[0] = DateTime.Now.ToShortDateString();

                        strArrDate[1] = DateTime.Now.AddDays(1).ToShortDateString();

                        strArrDate[2] = DateTime.Now.AddDays(-1).ToShortDateString();

                        ddlDate.DataSource = strArrDate;





            #region Web Form Designer generated code

            override protected void OnInit(EventArgs e)



                  // CODEGEN: This call is required by the ASP.NET Web Form Designer.






            /// <summary>

            /// Required method for Designer support - do not modify

            /// the contents of this method with the code editor.

            /// </summary>

            private void InitializeComponent()


                  this.btnGo.Click += new System.EventHandler(this.btnGo_Click);

                  this.Load += new System.EventHandler(this.Page_Load);





            private void btnGo_Click(object sender, System.EventArgs e)


                  string strClass = rblClasses.SelectedItem.ToString();

                  string strDate = ddlDate.SelectedItem.ToString();

                  //lblError.Text = strTest;         


                  SqlConnection myConnection;

                  myConnection = new SqlConnection("server=database;database=petrowebtest;uid=zz;pwd=zzz");



                  string vSql = "INSERT INTO tblTest(tblTestName,tblTestCol2) VALUES ('" + strClass + "','" + strDate + "')"; 

                  SqlCommand InsertCommand = new SqlCommand(vSql,myConnection);



                  string strSql = "select tblTestName as Name, tblTestCol2 as 'Column 2' from tblTest";

                  SqlCommand SelectCommand = new SqlCommand(strSql,myConnection);

                  SqlDataReader drSelect = SelectCommand.ExecuteReader();

                  dgClasses.Visible = true;

                  dgClasses.DataSource = drSelect;









            SMTP Mail                (Additionally Try-Catch )



string strWorked = funcMail();

            lblMail.Text = strWorked;

                        private string funcMail()




                        StringBuilder sbBody = new StringBuilder();

                        sbBody.Append(" This is the Body ");

                        MailMessage nmMessage = new MailMessage();

                        nmMessage.To = "ccupp@petroweb.com";

                        nmMessage.From = "ccupp@petroweb.com";

                        nmMessage.Subject = "How does this look....";

                        nmMessage.Body = sbBody.ToString();

                        nmMessage.BodyFormat = MailFormat.Html;

                        SmtpMail.SmtpServer = "MailBox2";


                        return "true";


                  catch(Exception ex)


                        return ex.ToString();







label2.Font.Italic = true; (doesn’t work not ‘settable’)

Radiobuttonlist for windows apps / Group box

 “\r\n for label in xml section….

Title not working for XML section

No source safe?

Common database




Summary Time



Talk about .NET

            MSIL / CLR

Talk about String/StringBuilder/ Arrays/ ArrayList

Go over controls except Datagrid

Have them do exercise up to Data






Data Access

Data Grid

Data List

Have them finish exercise


Depending on time, more datagrid/data access…