我对ASP.NET比较陌生。我的问题是我正在尝试创建一个GridView并使用DataTable将数据绑定到它。我的GridView元素出现在VS 2012的设计模式中,但是当我在浏览器(IE)中运行它时,什么也没有显示。我已经绑定了数据,显然输入了数据,我甚至将EmptyDataText设置为一个值,所以我很困惑为什么NOTHING从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>
这是我的CodeBehind
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>";
}
}
}
答案 0 :(得分:1)
你当地的gv实例搞砸了。检查部分类的其他部分以获取gv的定义。我猜你的Page_Load代码绑定到本地私有实例,而不是页面用于控件的受保护实例。您需要以下内容:
protected global::System.Web.UI.WebControls.GridView gv;
答案 1 :(得分:1)
我不确定,您是否要将gridview动态添加到页面或使用标记中的那个?如果是第一个,则需要添加语句
MyForm.Controls.Add(gv);
到Page_Load。如果是后者,则不需要
GridView gv = new GridView();
但可以通过ID来引用标记中的gv。
顺便说一下,您还必须更改Page_Load的参数类型:
protected void Page_Load(object sender, EventArgs e)
答案 2 :(得分: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>";
}