2013-05-21 40 views
2

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

<%@ 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>"; 
    } 
} 
} 

Image of Split View in VS.

回答

1

我不知道,你要动态添加GridView控件的页面或使用从您的标记的人吗?如果第一个,您需要添加语句

MyForm.Controls.Add(gv); 

Page_Load。如果是后者,你不需要

GridView gv = new GridView(); 

但是可以通过它的标识引用gv标记。

顺便说一句,你还必须改变在Page_Load的参数类型:

protected void Page_Load(object sender, EventArgs e) 
+1

谢谢你的回应。我的意图是动态添加gridview到页面。我尝试了你的建议,并添加了 MyForm.Controls.Add(gv);到Page_Load,但是即使在我删除了HTML标记之后,gridview仍然没有渲染。 – imnotverygoodatthis

+0

看看编辑。 – AGuyCalledGerald

+0

我可以哭我很高兴。非常感谢你的回应和帮助!这让我疯狂。 – imnotverygoodatthis

1

您当地的GV的实例被拧的事情了。检查你的部分类的其他部分的gv的定义。我猜你的Page_Load代码绑定到本地私有实例,而不是页面用于控件的受保护实例。你要像下面这样:

protected global::System.Web.UI.WebControls.GridView gv; 
+0

这很有道理。谢谢您的回复。我删除了gv的本地化实例,并像您所建议的那样将受保护的实例放入了部分类中。但是,这仍然没有解决问题。 GridView仍未在浏览器中呈现。 – imnotverygoodatthis

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>"; 
    } 
相关问题