2

我对 ASP.NET 比较陌生。我的问题是我正在尝试创建一个 GridView 并使用 DataTable 将数据绑定到它。我的 GridView 元素显示在 VS 2012 的设计模式中,但是当我在浏览器(IE)中运行它时,什么也没有显示。我已经绑定了数据,显然输入了数据,我什至将 EmptyDataText 设置为一个值,所以我很困惑为什么 GridView 元素的页面上没有显示任何内容。如果我在 GridView 之外设置其他标签,它会显示得很好,所以我不认为这是一个托管问题。即使我将 AutoGenerateColumns 值设置为 true,也没有任何反应。任何帮助都将非常感激。

 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs"  Inherits="Tester.Default" %> 

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>This is my page.</title>


<style type="text/css">
    table {
        border: 2px dashed #00FF00;
        padding: inherit;
        margin: inherit;
        width: auto;
        height: auto;
        top: auto;
        right: auto;
        bottom: auto;
        left: auto;
        background-color: #0000FF;
        color: #FFFFFF;
        font-weight: bold;
    }
</style>


</head>
<body>
<form runat="server" id="MyForm">
    <asp:GridView AutoGenerateColumns="false" ID="gv" runat="server" Width="1000px" Visible="true" BorderColor="Red" EmptyDataText="WHERE IS MY DATA???">
        <Columns>
            <asp:TemplateField>
                <ItemTemplate>
                    <asp:Label runat="server" Text="testing123">Label from GridView</asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:BoundField DataField="VenLogo" HeaderText="ID" />
            <asp:BoundField DataField="VenName" HeaderText="Website" />
            <asp:BoundField DataField="VenWeb" HeaderText="URL" HtmlEncode="false" />
        </Columns>
    </asp:GridView>

</form>
</body>
</html>

这是我的代码隐藏

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
using System.Data;
using System.Text;


namespace Tester
{
public partial class Default : System.Web.UI.Page
{
    GridView gv = new GridView();

    protected void Page_Load(object sender, ObjectDataSourceStatusEventArgs e)
    {


        if (!Page.IsPostBack)
        {
            gv.DataSource = Datatable();
            gv.DataBind();
            gv.Visible = true;
        }


    }

    private DataTable Datatable()
    {
        DataTable datatable = new DataTable();

        datatable.Columns.Add("VenLogo", typeof(string));
        datatable.Columns.Add("VenName", typeof(string));
        datatable.Columns.Add("VenWeb", typeof(string));

        AddNewRow("Logo URL", "google", "http://google.com", datatable);
        AddNewRow("Logo URL", "facebook", "http://facebook.com", datatable);

        return datatable; 
    }

    private void AddNewRow(string id, string website, string url, DataTable table)
    {
        DataRow row = table.NewRow();
        row["VenLogo"] = id;
        row["VenName"] = website;
        //get url from GetURL method  
        string link = GetURL(website, url);
        row["VenWeb"] = HttpUtility.HtmlDecode(link);
        table.Rows.Add(row);
    }


    private string GetURL(string website, string url)
    {
        return "<a href=\"" + url + "\">" + website + "</a>";
    }  
}
}

VS 中拆分视图的图像。

4

3 回答 3

1

您本地的 gv 实例搞砸了。检查部分类的其他部分以获取 gv 的定义。我猜您 Page_Load 代码绑定到本地私有实例,而不是页面用于控件的受保护实例。您将需要以下内容:

protected global::System.Web.UI.WebControls.GridView gv;
于 2013-05-21T14:07:03.597 回答
1

您的 CS 文件代码将是这样的。

protected void Page_Load(object sender, EventArgs e)
        {
            GridView gv = new GridView();

                gv.DataSource = Datatable();
                gv.DataBind();
                gv.Visible = true;
                MyForm.Controls.Add(gv);

        }
        private DataTable Datatable()
    {
        DataTable datatable = new DataTable();

        datatable.Columns.Add("VenLogo", typeof(string));
        datatable.Columns.Add("VenName", typeof(string));
        datatable.Columns.Add("VenWeb", typeof(string));

        AddNewRow("Logo URL", "google", "http://google.com", datatable);
        AddNewRow("Logo URL", "facebook", "http://facebook.com", datatable);

        return datatable; 
    }

    private void AddNewRow(string id, string website, string url, DataTable table)
    {
        table.Rows.Add(id, website, url);
    }


    private string GetURL(string website, string url)
    {
        return "<a href=\"" + url + "\">" + website + "</a>";
    }  
于 2013-05-21T15:42:30.473 回答
1

我不确定,您是想将gridview 动态添加到页面还是使用标记中的那个?如果是第一个,则需要添加语句

MyForm.Controls.Add(gv);

到 Page_Load。如果是后者,则不需要

GridView gv = new GridView();

但只能通过它的 ID 从标记中引用 gv。

顺便说一句,您还必须更改 Page_Load 的参数类型:

protected void Page_Load(object sender, EventArgs e)
于 2013-05-21T14:20:16.520 回答