【问题标题】:GridView in ASP.NET is not displaying with or without dataASP.NET 中的 GridView 不显示有或没有数据
【发布时间】:2012-05-04 13:14:48
【问题描述】:

我正在添加一个 GridView,然后在其中显示来自 SQL Server 数据库的数据。问题是 GridView 没有在浏览器中显示有或没有数据。

这是我的代码:

<asp:GridView ID="GridAllStore"  runat="server" AutoGenerateColumns="False" Width="100%"  ViewStateMode="Enabled">

public partial class AdminPanel : System.Web.UI.Page
{
    storelocatorDataSetTableAdapters.storedbTableAdapter tastore = new storelocatorDataSetTableAdapters.storedbTableAdapter();
    storelocatorDataSetTableAdapters.View_1TableAdapter taview = new storelocatorDataSetTableAdapters.View_1TableAdapter();

    List<storelocatorDataSet.storedbRow> lststore = new List<storelocatorDataSet.storedbRow>();
    List<storelocatorDataSet.View_1Row> lstview = new List<storelocatorDataSet.View_1Row>();
    protected void Page_Load(object sender, EventArgs e)
    {
        lstview = taview.GetData().ToList();
        GridAllStore.DataSource = lstview; 
    }
}

【问题讨论】:

  • 我想你忘了给GridAllStore.DataBind()打电话
  • 您要么必须将 AutoGenerateColumns 设置为 true,要么将列提供为您要显示的 Bound- 或 TemplateFields。无论哪种方式,您都必须 DataBind irt。
  • 这是您对GridView 的完整标记吗?
  • 仍然没有显示数据。实际上 gridview 从一开始就没有显示在浏览器中。我认为添加数据源将解决问题。 :(

标签: c# asp.net gridview


【解决方案1】:

我认为问题在于您没有定义任何要显示的列。当您将 AutoGenerateColumns 设置为 false 时,您必须明确定义列。

为确保基本工作正常,将AutoGenerateColumns 设置为 true:

<asp:GridView ID="GridAllStore"  runat="server" AutoGenerateColumns="true" Width="100%"  ViewStateMode="Enabled">

AutoGenerateColumns 设置为true、分配数据源并调用DataBind(),您应该开始看到一些数据。开始查看数据后,您可以定义要显示的特定列。

由于您只需要在第一个页面加载时绑定网格,因此利用!Page.IsPostBack 条件:

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        GridAllStore.DataSource = lstview;
        GridAllStore.DataBind();
    }
}

【讨论】:

    【解决方案2】:

    将您的代码更改为:

    protected void Page_Load(object sender, EventArgs e)
    {
        lstview = taview.GetData().ToList();
        GridAllStore.DataSource = lstview; 
        GridAllStore.DataBind();
    }
    

    并将您的 GridView 标记更改为:

    <asp:GridView ID="GridAllStore"  runat="server" AutoGenerateColumns="True" Width="100%"  ViewStateMode="Enabled" />
    

    注意到它现在是AutoGenerateColumns="True",因为这将显示数据并生成列。您可能需要自定义显示的内容。要做到这一点,由于您现在并不真正知道自己在做什么,因此切换到设计视图,您可以编辑 gridview 模板。

    查看这篇文章以获取有关自定义您输出的列和数据的一些帮助。 http://msdn.microsoft.com/en-us/library/bb288032.aspx

    【讨论】:

    • 谢谢! :) 我刚刚做到了。有效 。但我真的不知道如何删除自动生成的列。你能帮帮我吗?
    • 如果您在设计视图模式下打开.aspx 页面,您可以单击GridView 控件并对其进行编辑。它允许您选择要显示的列。或者,您可以使用自定义TemplateFields。也许看看这里寻求一些帮助? msdn.microsoft.com/en-us/library/bb288032.aspx
    • 如果您需要更多帮助,请给我们大喊!
    【解决方案3】:

    您是否尝试在设置数据源后立即添加以下行?

    GridAllStore.DataBind();
    

    【讨论】:

    • 您确认lstview中有数据了吗?
    • AutoGenerateColumns 也设置为 true 吗?还要检查网格的可见性及其父控件的可见性。也做一个查看源代码,看看网格是否存在但由于某种原因没有显示。
    • 在将 AutogeneratedColumns 设置为 true 后它现在可以工作了。 :D 但是,现在我想删除自动生成的列。我是怎么做到的?
    • 您可以关闭该属性并添加您自己的列。这是一个帮助您入门的教程:c-sharpcorner.com/uploadfile/61b832/…
    • 我刚刚检查了你的 tuto 。它给了我这样的错误: Error Creating Control - GridAllStoreLiteral content ('') 在 System.Web.UI 中是不允许的。 WebControls.DataControlFieldCollection'。
    猜你喜欢
    • 2013-06-08
    • 2014-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多