Skip to main content

Dynamically Adding TextBox Control to ASPNET Table


 
Few months ago I wrote an example about Dynamically Adding TextBox Control to ASPNET Table. As a recap that example demonstrate how to generate rows of TextBoxes in a Table control based on the number of rows and number of columns provided and as well as print the values entered by the user using the Request.Forms collections.. Recently,one of the user is asking  if how are we going to accomplish the same thing by generating the TextBox in the Table based on the data from the database. So in this post I'm going to demonstrate an example on how to do it.
Okay to get started lets go a head and set up our WebForm.  I have used master page in this example so the mark up would look something like this:

<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server">
   </asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
      <asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
  </asp:Content>

As you can see there's nothing fancy in the mark up above. It just contain a PlaceHolder control in which we will add the dynamic table on it. Now lets flip to code behind page.
Here are the full code blocks below:

             private DataTable FillData() {
      
                 DataTable dt = new DataTable();
                 DataRow dr = null;
      
                 //Create DataTable columns
                 dt.Columns.Add(new DataColumn("RowNumber", typeof(string)));
                 dt.Columns.Add(new DataColumn("Col1", typeof(string)));
                 dt.Columns.Add(new DataColumn("Col2", typeof(string)));
                dt.Columns.Add(new DataColumn("Col3", typeof(string)));
                dt.Columns.Add(new DataColumn("Col4", typeof(string)));
     
                //Create Row for each columns
                dr = dt.NewRow();
                dr["RowNumber"] = 1;
                dr["Col1"] = "A";
                dr["Col2"] = "B";
                dr["Col3"] = "C";
                dr["Col4"] = "D";
                dt.Rows.Add(dr);
     
                dr = dt.NewRow();
                dr["RowNumber"] = 2;
                dr["Col1"] = "AA";
                dr["Col2"] = "BB";
                dr["Col3"] = "CC";
                dr["Col4"] = "DD";
                dt.Rows.Add(dr);
     
                dr = dt.NewRow();
                dr["RowNumber"] = 3;
                dr["Col1"] = "A";
                dr["Col2"] = "B";
                dr["Col3"] = "CC";
                dr["Col4"] = "DD";
                dt.Rows.Add(dr);
     
                dr = dt.NewRow();
                dr["RowNumber"] = 4;
                dr["Col1"] = "A";
                dr["Col2"] = "B";
                dr["Col3"] = "CC";
                dr["Col4"] = "DD";
                dt.Rows.Add(dr);
     
                dr = dt.NewRow();
                dr["RowNumber"] = 5;
                dr["Col1"] = "A";
                dr["Col2"] = "B";
                dr["Col3"] = "CC";
                dr["Col4"] = "DD";
                dt.Rows.Add(dr);
     
                return dt;
            }
     
            private void GenerateTable(DataTable dtSource) {
                int rowsCount = dtSource.Rows.Count;
                int colsCount = dtSource.Columns.Count;
     
                //Creat the Table and Add it to the Page
                Table table = new Table();
                table.ID = "Table1";
     
                // Add the dynamic table to the PlaceHolder control
                PlaceHolder1.Controls.Add(table);
     
                // Now iterate through the datatable and add the controls
                for (int rowIndex = 0; rowIndex < rowsCount; rowIndex++) {
     
                    TableRow row = new TableRow();
     
                    for (int colIndex = 0; colIndex < colsCount; colIndex++) {
                        TableCell cell = new TableCell();
                        TextBox tb = new TextBox();
                        // Set a unique ID for each TextBox added
                        tb.ID = "TextBoxRow_" + rowIndex + "Col_" + colIndex;
                        // Assign value for each TextBox added
                        tb.Text = dtSource.Rows[rowIndex][colIndex].ToString();
                        // Add the control to the TableCell
                        cell.Controls.Add(tb);
                        // Add the TableCell to the TableRow
                        row.Cells.Add(cell);
                    }
                    // After the columns iteration, add the TableRow to the Table
                    table.Rows.Add(row);
                }
            }
            protected void Page_Load(object sender, EventArgs e) {
                if (!IsPostBack) {
                    GenerateTable(FillData());
                }
            }
 The code above have two main Methods which are the FillData() and GenerateTable(). The FillData() method is a method that returns a DataTable. If you notice I just fill the DataTable with a dummy data just for the purpose of this demo. In case you want to grab the data from the Database then you can replace the implementation of the FillData() method. You can use DataTable and  SqlDataAdapter. Assign a select command to your SqlDataAdapter and then callSqlDataAdapter .Fill method. This would populate the desired data into yourDataTable . Here's a quick example below for your reference:

            private DataTable FillData() {
                 DataTable dt = new DataTable();
                 using (SqlConnection connection = new SqlConnection("Your Connection String")) {
                     try {
                         connection.Open();
                         string spName = "YOURStoredProcudureName";
                         SqlCommand sqlCmd = new SqlCommand(spName, connection);
                         SqlDataAdapter sqlDa = new SqlDataAdapter(sqlCmd);
                         sqlCmd.CommandType = CommandType.StoredProcedure;
     
                        sqlDa.Fill(dt);
                        if (dt.Rows.Count > 0) {
                            return dt;
                        }
                    }
                    finally {
                        connection.Close();
                    }
                    return dt;
                }
            }
 That simple. Now, the GenerateTable() method handles the generation of dynamic texboxes in the Table control. This method will generate rows of TextBoxes based on the row count and column count of the DataTable source. I have included some comments on that method to help you undertand the code.

Comments

Popular posts from this blog

PNR Status by web Scraping Method (ASP.NET) C#

To Get the PNR Status by web Scraping Method Steps to Execute the Function Step 1 : Add the below method in your Form and Pass the PNR Number arguement public string GetPNRStatus( string sPNR) { string URI = "http://www.indianrail.gov.in/cgi_bin/inet_pnrstat_cgi.cgi" ; string Parameters = Uri .EscapeUriString( "lccp_pnrno1=" +sPNR+ "&amp;submitpnr=Get Status" ); System.Net. HttpWebRequest req = ( HttpWebRequest )System.Net. WebRequest .Create(URI); //HTTP POST Headers req.ContentType = "application/x-www-form-urlencoded" ; req.Host = "www.indianrail.gov.in" ; //You can use your own user-agent. req.UserAgent = "Mozilla/5.0 (compatible; MSIE 7.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0) DELL;Venue Pro" ; req.Headers.Add( HttpRequestHeader .AcceptLanguage, "en-us,en;q=0.5" ); req.Headers.Add( HttpRequestHeader .AcceptCharset, "ISO-8859-1,utf-8;q=
C# HttpClient tutorial C# HttpClient tutorial shows how to create HTTP requests with HttpClient in C#. In the examples, we create simple GET and POST requests. The Hypertext Transfer Protocol (HTTP) is an application protocol for distributed, collaborative, hypermedia information systems. HTTP is the foundation of data communication for the World Wide Web. HttpClient  is a base class for sending HTTP requests and receiving HTTP responses from a resource identified by a URI. C# HttpClient status code HTTP response status codes indicate whether a specific HTTP request has been successfully completed. Responses are grouped in five classes: Informational responses (100–199) Successful responses (200–299) Redirects (300–399) Client errors (400–499) Server errors (500–599) Program.cs using System; using System.Net.Http; using System.Threading.Tasks; namespace HttpClientStatus { class Program { static async Task Main(string[] args) { using var client = new

Popup form on Screen Center Javascript

Popup Form on Center  to popup the form on Screen Center use the below Script Example : <script language="javascript"> var popupWindow = null; function centeredPopup(url,winName,w,h,scroll){ LeftPosition = (screen.width) ? (screen.width-w)/2 : 0; TopPosition = (screen.height) ? (screen.height-h)/2 : 0; settings = 'height='+h+',width='+w+',top='+TopPosition+',left='+LeftPosition+',scrollbars='+scroll+',resizable' popupWindow = window.open(url,winName,settings) } </script> <p><a href="http://www.quackit.com/common/link_builder.cfm" onclick="centeredPopup(this.href,'myWindow','500','300','yes');return false">Centered Popup</a></p>