简体   繁体   中英

Converting Asp.Net GridView with controls to DataTable

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

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; }

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------

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM