2013-05-21 38 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>"; 
    } 
相關問題