必须将'GridView'放在带有runat = server的表单标记内.

Pau*_*iel 4 c# gridview

所以,我研究了你的网站,我的情况很独特.我有一个Web控件.ascx,它有一个gridview,代码如下所示:

<body>

    <div>
        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" AllowPaging="true"
            OnPageIndexChanging="GridView1_PageIndexChanging" PageSize="10">
            <Columns>
                <asp:BoundField DataField="fb_login" HeaderText="User Id" runat="server" />
                <asp:BoundField DataField="fb_url" HeaderText="URL___" />
                <asp:BoundField DataField="fb_response" HeaderText="Answer: Did you find what you were looking for?" />
                <asp:BoundField DataField="fb_noResponse" HeaderText="No Response or Ignore" />
                <asp:BoundField DataField="fb_date" HeaderText="Date" />
                <asp:BoundField DataField="fb_serviceCall" HeaderText="Prevented Service Call" />
                <asp:BoundField DataField="fb_partsShipment" HeaderText="Prevented Parts Shipment" />
                <asp:BoundField DataField="fb_warranty" HeaderText="Under Warranty" />
                <asp:BoundField DataField="fb_cancel" HeaderText="Cancelled" />
                <asp:BoundField DataField="fb_none" HeaderText="None of the Above" />
            </Columns>
        </asp:GridView>
        <asp:Button ID="download" Text=" Download to Excel " OnClick="dwnLoad" runat="server" />
    </div>
Run Code Online (Sandbox Code Playgroud)

我有一个下载到Excel按钮,执行以下代码:

protected void dwnLoad(object sender, EventArgs e)
        {
            Response.Clear();
            Response.AddHeader("content-disposition", "attachment; filename=kbNotification.xls");
            Response.Charset = "";
            Response.Cache.SetCacheability(HttpCacheability.NoCache);
            Response.ContentType = "application/vnd.xls";
            System.IO.StringWriter stringWrite = new System.IO.StringWriter();
            System.Web.UI.HtmlTextWriter htmlWriter = new HtmlTextWriter(stringWrite);
            GridView1.RenderControl(htmlWriter);
            Response.End();
        }
Run Code Online (Sandbox Code Playgroud)

当我按下按钮时,我发现以下错误:

 Exception Details: System.Web.HttpException: Control 'pagecontent_0_GridView1' of type 'GridView' must be placed inside a form tag with runat=server.

Source Error: 


Line 54:             Response.Cache.SetCacheability(HttpCacheability.NoCache);
Line 55:             Response.ContentType = "application/vnd.xls";
Line 56:             System.IO.StringWriter stringWrite = new System.IO.StringWriter();
Line 57:             System.Web.UI.HtmlTextWriter htmlWriter = new HtmlTextWriter(stringWrite);
Line 58:             GridView1.RenderControl(htmlWriter);


Source File: C:\Projects\MEAU\trunk\Code\MEAU.Web\Components\SupportCenter\KB_Notification_rpt.ascx.cs    Line: 56 
Run Code Online (Sandbox Code Playgroud)

我试图将以下方法添加到codebehind:

public override void VerifyRenderingInServerForm(Control control)
        {
            return;
        }
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为这是一个.ascx页面,所以我也尝试将它添加到我的default.aspx页面......我仍然得到错误,它无法找到覆盖的方法.

请帮助,如果你能发现任何不正确的东西,我将不胜感激.问候,

Hen*_*man 5

WebControl(ascx)不应包含<body>标记.

它生成一个HTML片段,它应放在HTML页面内部和asp:Form元素内部.


小智 5

protected void Page_Load(object sender, EventArgs e)
    {           
       btnExcel_Click +=................
        if (!IsPostBack)
        {
            BindGridview();
        }
    }

    protected void BindGridview()
    {
        gvdetails.DataSourceID = "dsdetails";      
    }

    public override void VerifyRenderingInServerForm(Control control)
    {
        /* Verifies that the control is rendered */
    }

    protected void btnExcel_Click(object sender, ImageClickEventArgs e)
    {
        Response.ClearContent();
        Response.Buffer = true;
        Response.AddHeader("content-disposition", string.Format("attachment; filename={0}", "Customers.xls"));
        Response.ContentType = "application/ms-excel";
        StringWriter sw = new StringWriter();
        HtmlTextWriter htw = new HtmlTextWriter(sw);
        gvdetails.AllowPaging = false;
        BindGridview();
        //Change the Header Row back to white color
        gvdetails.HeaderRow.Style.Add("background-color", "#FFFFFF");
        //Applying stlye to gridview header cells
        for (int i = 0; i < gvdetails.HeaderRow.Cells.Count; i++)
        {
            gvdetails.HeaderRow.Cells[i].Style.Add("background-color", "#df5015");
        }
        gvdetails.RenderControl(htw);
        Response.Write(sw.ToString());
        Response.End();
}
Run Code Online (Sandbox Code Playgroud)

使用此代码可以将数据从gridViewexcel 下载到excel。