2

Coding Problem:

Converting a Asp.Net GridView that has controls back into a data table

Real World Problem:

Google did not have any really useful answers I could find and implement

Asp.Net GridView:

<asp:GridView ID="gvCompanies" runat="server" AutoGenerateColumns="False" AllowSorting="True" OnSorting="gridView_Sorting">
            <Columns>
            <asp:TemplateField HeaderText = "Comapny Id"><ItemTemplate><%# Eval("Company Id")%></ItemTemplate></asp:TemplateField>
            <asp:TemplateField HeaderText = "New Company Id"><ItemTemplate><asp:TextBox ID="TextBox5" runat ="server"></asp:TextBox></ItemTemplate></asp:TemplateField>
            <asp:TemplateField HeaderText = "Company Name"><ItemTemplate><asp:TextBox ID="TextBox6" runat ="server"></asp:TextBox></ItemTemplate></asp:TemplateField>
            <asp:TemplateField HeaderText = "Branch Id"><ItemTemplate><asp:TextBox ID="TextBox7" runat ="server"></asp:TextBox></ItemTemplate></asp:TemplateField>
            <asp:TemplateField HeaderText = "Location Id"><ItemTemplate><asp:TextBox ID="TextBox8" runat ="server"></asp:TextBox></ItemTemplate></asp:TemplateField>
            <asp:TemplateField HeaderText = "Location Name"><ItemTemplate><asp:TextBox ID="TextBox9" runat ="server"></asp:TextBox></ItemTemplate></asp:TemplateField>
            <asp:TemplateField HeaderText = "Prefix"><ItemTemplate><asp:TextBox ID="TextBox10" runat ="server" ></asp:TextBox></ItemTemplate></asp:TemplateField>
            <asp:TemplateField HeaderText = "Sort"><ItemTemplate><asp:TextBox ID="TextBox11" runat ="server"></asp:TextBox></ItemTemplate></asp:TemplateField>
            <asp:TemplateField HeaderText = "Cash In Transit"><ItemTemplate><asp:TextBox ID="TextBox12" runat ="server"></asp:TextBox></ItemTemplate></asp:TemplateField>
            <asp:TemplateField HeaderText = "Cash Sub In Transit"><ItemTemplate><asp:TextBox ID="TextBox13" runat ="server"></asp:TextBox></ItemTemplate></asp:TemplateField>
            <asp:TemplateField HeaderText = "Cash Account"><ItemTemplate><asp:TextBox ID="TextBox14" runat ="server"></asp:TextBox></ItemTemplate></asp:TemplateField>
            <asp:TemplateField HeaderText = "Cash Sub Account"><ItemTemplate><asp:TextBox ID="TextBox15" runat ="server"></asp:TextBox></ItemTemplate></asp:TemplateField>
            <asp:TemplateField HeaderText = "Payment Method"><ItemTemplate><asp:TextBox ID="TextBox16" runat ="server"></asp:TextBox></ItemTemplate></asp:TemplateField>
            <asp:TemplateField HeaderText = "AppDB"><ItemTemplate><%# Eval("AppDB")%></ItemTemplate></asp:TemplateField>
            </Columns>
            </asp:GridView
3
  • 1
    Did you try converting the DataSource back to a DataTable? Commented Nov 30, 2012 at 22:23
  • You're talking about converting the data to a System.Data.DataTable, correct? Not a System.Web.UI.WebControls.Table? Commented Nov 30, 2012 at 22:40
  • No it is a System.Web.UI.WebControls.GridView and @Henk Mollema you cannot just convert the DataSource back to DataTAble as it is nulled after postback (after binding) Commented Dec 1, 2012 at 1:20

2 Answers 2

4

Solution:

  1. gvCompanies is the GridView
  2. dtCompanies was the original DataTable
  3. Can add more if else for different control types

    protected DataTable ConvertToDataTable()
    {
        DataTable TempTable = new DataTable();
        TempTable = dtCompanies.Clone();
    
        foreach (GridViewRow row in gvCompanies.Rows)
        {
             DataRow TempRow = TempTable.NewRow();
    
             for (int i = 0; i < row.Cells.Count; i++)
             {
                 if (row.Cells[i].Controls[0].GetType().Equals(typeof(DataBoundLiteralControl)))
                 {
                     TempRow[i] = ((DataBoundLiteralControl)row.Cells[i].Controls[0] as DataBoundLiteralControl).Text;
                 }
                 else if (row.Cells[i].Controls[0].GetType().Equals(typeof(TextBox)))
                 {
                     TempRow[i] = ((TextBox)row.Cells[i].Controls[0]).Text;
                 }
             }
             TempTable.Rows.Add(TempRow);
        }
        return TempTable;
    }
    
Sign up to request clarification or add additional context in comments.

Comments

0

Dim Rectab As New DataTable 'Take A new Data Table

       '------Add Columns into your DataTable----------------
        For k As Integer = 0 To CalibSchdNameAry.Length - 1 
            Rectab.Columns.Add(CalibSchdNameAry(k))
        Next
       '-----------------------------------------------------
       '------Add Rows Data Into Your Datatable From Html Table-------
        For i As Integer = 0 To ClbTab.Rows.Count - 1
            Rectab.Rows.Add()
            For j As Integer = 0 To CalibSchdNameAry.Length - 1
                If i + 1 < ClbTab.Rows.Count - 1 Then
                    Rectab.Rows(i).Item(CalibSchdNameAry(j)) = ClbTab.Rows(i + 1).Cells(j).Text
                End If
            Next


        Next

'-----------------Now Your Datatable is ready To Use---------------Suresh.A------

1 Comment

While this code snippet may solve the question, including an explanation really helps to improve the quality of your post. Remember that you are answering the question for readers in the future, and those people might not know the reasons for your code suggestion.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.