none
請問gridview匯出的問題? RRS feed

  • 問題

  • 各位好
    Me.GridView1.AllowPaging = False
    Me.GridView1.DataBind()

    Response.Clear()
    Response.Buffer = True

    '資料格名稱.columns(0).visible = False '可定義哪列不要轉
    Me.GridView1.Columns(6).Visible = False '可定義哪列不要轉

    Response.AddHeader("content-disposition", "attachment; filename=new.xls")
    Response.ContentType = "application/vnd.ms-excel"

    Response.Charset = ""
    Me.EnableViewState = False

    Dim tw As StringWriter = New System.IO.StringWriter
    Dim hw As HtmlTextWriter = New HtmlTextWriter(tw)

    Me.GridView1.RenderControl(hw)

    Response.Write(tw.ToString())
    Response.End()

    Me.GridView1.Columns(6).Visible = True '可定義哪列
    Me.GridView1.AllowPaging = True
    Me.GridView1.DataBind()


    我去看原始檔

    <asp:GridView ID="GridView1" runat="server" AllowPaging="True" AllowSorting="True"
    AutoGenerateColumns="False" DataSourceID="SqlDataSource1" Height="150px" Width="757px" CellPadding="4" ForeColor="#333333" GridLines="None">
    <Columns>
    <asp:TemplateField HeaderText="指標" ShowHeader="False">
    <ItemTemplate>
    <asp:Button ID="Button1" runat="server" CausesValidation="false" CommandName="test1"
    OnClick="Button1_Click" Text="按鈕" />
    </ItemTemplate>
    </asp:TemplateField>
    <asp:BoundField DataField="姓名" HeaderText="姓名" SortExpression="姓名" />

    ----------
    gridview是有runat=server

    但在測試時卻會要我將griwview放在有runat=server的敘述中執行

    以上不知哪要加上宣告
    敬請協助謝謝
    2007年12月9日 上午 02:26

解答

所有回覆

  • 你頁面中的標籤是否有加上 runat="server" ?

    程式碼區塊

     

    <form id="form1" runat="server">

     

     

     


    ----
    From: Will
    Blog: http://blog.miniasp.com/
    記載著 Will 在網路世界的學習心得與技術分享

    2007年12月9日 上午 02:45
  • 您好

    有貼

    <body background="image/89.WMF">
        <form id="form1" runat="server">

     

    -------

    錯誤標示是在這段

    Me.GridView1.RenderControl(hw)

    敬請協助

    謝謝您

    2007年12月9日 上午 03:01
  • HI,

     

    請將

     

    Me.GridView1.RenderControl(hw)

     

    改成:

     

    Dim frm As HtmlForm = New HtmlForm()
    GridView1.Parent.Controls.Add(frm)
    frm.Attributes("runat") = "server"
    frm.Controls.Add(GridView1)

    frm.RenderControl(hw)

     

    另外GridView控制項中如果有包含Control, 例如CheckBox, 要自行定義該控制項如何匯出, 否則會有問題

     

    tihs

    2007年12月9日 上午 06:03
  • 在 ASP.NET HTML code:

     

    程式碼區塊

     

    <%@ Page Language="C#" AutoEventWireup="true" EnableEventValidation="false" CodeFile="DownloadExcel.aspx.cs" Inherits="Part4_DownloadExcel" %>

     

     

    在 Code File:

     

    程式碼區塊

    public override void VerifyRenderingInServerForm(Control control)

    {

         // base.VerifyRenderingInServerForm(control);

    }

     

     

    2007年12月9日 上午 07:03
    版主
  • 您好

    加入

      Public Overrides Sub VerifyRenderingInServerForm(ByVal control As Control) 


        End Sub

     

    與form 追加 EnableEventValidation="false"

    就可以了

    謝謝

     

    但是資料內字串10101010000

    會被認定是數字

    不知如何使欄位資料型態匯出後能正常?

    以上敬請協助

    謝謝

    2007年12月9日 上午 09:35
  • 程式碼區塊

    private void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)

    {

        if (e.Row.RowType == DataControlRowType.DataRow)

        {

            e.Row.Cells[0].Attributes.Add("style",

           "mso-number-format: \\@");

        }

    }

     

     

     

    2007年12月9日 上午 10:46
    版主
  • 您好

    翻成

    Private Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs)

            If e.Row.RowType = DataControlRowType.DataRow Then

                e.Row.Cells(0).Attributes.Add("style", "mso-number-format: \@")
            End If

        End Sub

     

    請問如何呼叫使用

    因為直接執行匯出後狀況是一樣

    以上謝謝

    2007年12月9日 下午 12:23
  • 以下謝謝

     

    這是 GridView 的 RowDataBound 事件處理常式。

     

    2007年12月9日 下午 12:26
    版主
  • 您好

    我有從提示功能上看到RowDataBound 選項

    只是不知道要送哪各物件與判斷式

    剛剛查help也是寫得看不懂

    我再試試

    謝謝

    2007年12月9日 下午 12:50
  • 您好套用後是否匯出

    但字串欄位1011010001100

    還是被辨認成數字型以科學符號出現

     Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound
            e.Row.Cells(0).Attributes.Add("class", "text")
        End Sub

    套用原有版主的方式仍維持上列說明

    以上謝謝

    敬請協助

    2007年12月10日 上午 12:31
  • 您程式碼怎麼寫的?
    Cell(x)裡面的index是看你哪個欄位要調整數字,就使用那個欄位索引。

    2007年12月10日 上午 12:53
    版主
  • 您好

    已經將cell(0)更改後就好了

    但字串形欄位101110110100

    還是被辨認數字

    謝謝您

    敬請協助

    2007年12月10日 上午 12:57
  • 剛剛測試了一下是可以的:

    程式碼區塊

     Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound

            e.Row.Cells(1).Attributes.Add("class", "text")

            e.Row.Cells(3).Attributes.Add("class", "text")

        End Sub

     

     

    這裡我把第四個欄位(index=3)設定為字串 , 就不會被辨認成數字了.
    2007年12月10日 上午 01:09
    版主
  • 您好

    請問

    為何

    e.Row.Cells(3).Attributes.Add("class", "text")

    指定的引數超出有效值的範圍。
    參數名稱: index

     

    e.Row.Cells(0).Attributes.Add("class", "text")

    就ok

     

    敬請協助

    謝謝您

    2007年12月10日 上午 02:19
  • 這個錯誤是因為你的欄位沒有這麼多.

    e.Row.Cells(3).Attributes.Add("class", "text")

    這個3是你欄位的索引值,第一個欄位是0,第二個是1..依序下去。

     

    2007年12月10日 上午 02:45
    版主
  • HI,

     

    因為在您的程式中有隱藏一個欄位不匯出, 請將隱藏欄位的語法拿掉就OK了.

     

    tihs

    2007年12月10日 上午 02:45
  • 您好

    我的gridview是有8個欄位

    index欄位位於第3個

    只能設定0,才會一載入網站時才不會出錯

    以上敬請協助

    謝謝您

    2007年12月10日 上午 03:05
  • 如果設定為3, 那一開始載入會發生甚麼錯誤?

    2007年12月10日 上午 07:31
    版主
  • 您好

    一進入首頁就出現錯誤

    可是頁面上我有兩個gridview

    匯出怎知我是要會哪一個

     Dim style As String = "<style> .text { mso-number-format:\@; } </style> "

            Response.AppendHeader("Content-Disposition", "attachment; filename=excel.xls")
            Response.ContentType = "application/vnd.ms-excel"
            'Me.GridView1.Columns(0).Visible = False '可定義哪列不要轉
            'Me.GridView1.Columns(7).Visible = False '可定義哪列不要轉

            Dim sw As New System.IO.StringWriter
            Dim hw As New System.Web.UI.HtmlTextWriter(sw)
            Response.Write("<meta http-equiv=Content-Type content=text/html;charset=utf-8>")
            GridView1.RenderControl(hw)

            Response.Write(style)
            Response.Write(sw.ToString())
            Response.End()
            'Me.GridView1.Columns(0).Visible = True '可定義哪列不要轉
            'Me.GridView1.Columns(7).Visible = True '可定義哪列不要轉

    看式子並無指定哪一個?

    以上敬請協助

    謝謝您

     

    眼睛沒帶出來

    GridView1.RenderControl(hw)
    2007年12月10日 上午 07:49
  • Dim style As String = "<style> .text { mso-number-format:\@; } </style> "

            Response.AppendHeader("Content-Disposition", "attachment; filename=excel.xls")
            Response.ContentType = "application/vnd.ms-excel"
            'Me.GridView1.Columns(0).Visible = False '可定義哪列不要轉
            'Me.GridView1.Columns(7).Visible = False '可定義哪列不要轉

            Dim sw As New System.IO.StringWriter
            Dim hw As New System.Web.UI.HtmlTextWriter(sw)
            Response.Write("<meta http-equiv=Content-Type content=text/html;charset=utf-8>")
            GridView1.RenderControl(hw)

            Response.Write(style)
            Response.Write(sw.ToString())
            Response.End()
            'Me.GridView1.Columns(0).Visible = True '可定義哪列不要轉
            'Me.GridView1.Columns(7).Visible = True '可定義哪列不要轉

     

    程式碼中有指定囉..

    2007年12月10日 上午 07:51
    版主
  • 您好出現

    指定的引數超出有效值的範圍。
    參數名稱: index

    指到

     e.Row.Cells(2).Attributes.Add("class", "text")

    若是為0則會正常

    gridview共有8個欄位

    有兩欄是按鈕與圖片

    再匯出時有先隱藏

    但錯誤是一開始進入頁面(建置成功後馬上跳出來錯誤)

    應該跟隱藏與否有關

    我也曾試着做,但還是錯誤

    以上敬請協助

    謝謝

     

    2007年12月10日 上午 08:12
  • 您好

    剛剛看了我的aspx原始檔

       <input type="submit" name="GridView1$ctl04$Button1" value="按鈕" id="GridView1_ctl04_Button1" />
                                    </td><td>RRRRRR              </td><td>000011</td><td>999666</td><td>101110001100000</td><td>100000011100000</td><td>000000000000000</td><td><img src="image/RRRRRR" style="border-width:0px;" /></td>
       </tr><tr style="background-color:White;">

    發現並沒有class=text

    與您提的案例

    e.Row.Cells(1).Attributes.Add("class", "text")

    不同

    不知為何如此

    以上謝謝

     

     

    2007年12月11日 上午 01:05