【问题标题】:Asp.Net VB webform How to export a template field Gridview to csv?Asp.Net VB webform 如何将模板字段 Gridview 导出为 csv?
【发布时间】:2021-04-05 11:02:33
【问题描述】:

我有一个gridview,它的所有字段都是TemplateField,其中包含文本框作为它的ItemTemplate。该应用程序的想法是让 gridview 通过 SqlDataSource 从数据库中获取模板。然后用户可以通过文本框编辑所需的gridview行并按下按钮将gridview转换为csv文件。

根据我的理解,编辑和更新 gridview 控件会更新数据库值,我不想更改数据库记录。

我的代码

我曾尝试使用此方法,但据我了解,它仅适用于 BoundFields 而不是 Templatefields,因为它在使用 Templatefields 时返回空白值。

Sub ExcelConvertion2()
    Response.Clear()
    Response.Buffer = True
    Response.AddHeader("content-disposition", "attachment;filename=GridViewExport.csv")
    Response.Charset = ""
    Response.ContentType = "application/text"

    Dim sb As StringBuilder = New StringBuilder()

    For Each cell As TableCell In GridView1.HeaderRow.Cells
        'Append data with separator.
        sb.Append(cell.Text & ",")
    Next

    'Append new line character.
    sb.Append(vbCr & vbLf)

    For Each row As GridViewRow In GridView1.Rows

        For Each cell As TableCell In row.Cells
            'Append data with separator.
            sb.Append(cell.Text & ",")
        Next

        'Append new line character.
        sb.Append(vbCr & vbLf)
    Next

    Response.Output.Write(sb.ToString())
    Response.Flush()
    Response.End()
End Sub

Gridview 代码

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource1" BackColor="White" BorderColor="#336666" BorderStyle="Double" BorderWidth="3px" CellPadding="4" Font-Size="Small">
            <Columns>
                <asp:TemplateField HeaderText="Handle">
                    <ItemTemplate>
                        <asp:TextBox ID="HandleTextBox" runat="server" Text='<%# Eval("Handle") %>'></asp:TextBox>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Title">
                    <ItemTemplate>
                        <asp:TextBox ID="TittleTextBox" runat="server" Text='<%# Eval("Title") %>'></asp:TextBox>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="BodyHTML">
                    <ItemTemplate>
                        <asp:TextBox ID="BodyHTMLTextBox" runat="server"  Text='<%# Eval("BodyHTML") %>'></asp:TextBox>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Vendor">
                    <ItemTemplate>
                        <asp:TextBox ID="VendorTextBox" runat="server" Text='<%# Eval("Vendor") %>'></asp:TextBox>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Type">
                    <ItemTemplate>
                        <asp:TextBox ID="TypeTextBox" runat="server" Text='<%# Eval("TYPE") %>'></asp:TextBox>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Tags">
                    <ItemTemplate>
                        <asp:TextBox ID="TagsTextBox" runat="server"  Text='<%# Eval("Tags") %>'></asp:TextBox>
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
            <FooterStyle BackColor="White" ForeColor="#333333" />
            <HeaderStyle BackColor="#336666" Font-Bold="True" ForeColor="White" />
            <PagerStyle BackColor="#336666" ForeColor="White" HorizontalAlign="Center" />
            <RowStyle BackColor="White" ForeColor="#333333" />
            <SelectedRowStyle BackColor="#339966" Font-Bold="True" ForeColor="White" />
            <SortedAscendingCellStyle BackColor="#F7F7F7" />
            <SortedAscendingHeaderStyle BackColor="#487575" />
            <SortedDescendingCellStyle BackColor="#E5E5E5" />
            <SortedDescendingHeaderStyle BackColor="#275353" />
        </asp:GridView>

模板示例:

问题

如何将 TemplateField 网格视图转换为 csv 文件。

【问题讨论】:

  • 如果你可以使用javascipt,你可以使用getElementsByTagName("tr")的函数来做到这一点

标签: asp.net vb.net gridview export-to-csv


【解决方案1】:

您可以使用上面的方法,但您需要专门获取每个文本框的值。

Dim txtType as Textbox
Dim txtVendor as Textbox


 For Each row As GridViewRow In GridView1.Rows

      txtType = CType(row.FindControl("TypeTextBox"), TextBox)
      txtVendor = CType(row.FindControl("VendorTextBox"), TextBox)

       sb.Append(txtType.Text & ",")
       sb.Append(txtVendor.Text & ",")

        'Append new line character.
        sb.Append(vbCr & vbLf)

    Next

【讨论】:

  • 试图实现您的方法,但是当我再次执行程序时出现错误: System.NullReferenceException: '对象引用未设置为对象的实例。 For Each row As GridViewRow In GridView1.Rows handle = CType(row.FindControl("Handle"), TextBox) title = CType(row.FindControl("Title"), TextBox) bodyHTML = CType(row.FindControl("BodyHTML"), TextBox) sb.Append(handle.Text &amp; ",") sb.Append(title.Text &amp; ",") sb.Append(bodyHTML.Text &amp; ",") sb.Append(vbCr &amp; vbLf) Next
  • 确保行中引号中的值,FindControl 与文本框的 ID 值匹配。例如,我在您的示例代码块中没有看到 ID 为“Handle”的文本框控件,但确实看到了一个 id=“HandleTextBox” 的文本框
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-31
  • 2012-06-25
相关资源
最近更新 更多