【问题标题】:Datalist in ASP.NET will not display?ASP.NET 中的数据列表不会显示?
【发布时间】:2010-12-29 19:08:38
【问题描述】:

几天来,我一直致力于在 ASP.NET 代码中使用 DataList 动态生成一些标签,但在我的一生中,无法将控件显示到屏幕上。我很确定问题是一些小的语法问题,或者是我忘记设置的 HTML 标记。我已通过调试器确认数据列表实际上已被拉入数据源,当我查看 HTML 代码“设计”视图时,控件确实显示。但是,当我运行该页面时,该控件不可见。非常感谢任何关于为什么会发生这种情况的见解。

下面是与问题相关的代码...

C#部分类:

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            InventoryService service = new InventoryService();

            ArrayList foundYears = service.FindYears();
            DataSet ds = new DataSet();
            ds.Tables.Add("Years");
            ds.Tables[0].Columns.Add("Year");

            foreach (string yr in foundYears)
            {
                if (yr != "")
                {
                    DataRow dr = ds.Tables[0].NewRow();
                    dr["Year"] = yr;
                    ds.Tables[0].Rows.Add(dr);
                }
            }

            DataList headerRepeater = new DataList();
            headerRepeater.DataSource = ds.Tables[0];
            headerRepeater.DataKeyField = "Year";
            headerRepeater.DataBind();
            headerRepeater.Visible = true;
        }
    }

HTML 部分类:

<table width="100%" align="center">
    <tr>
        <td style="width: 868px">
             <asp:DataList id='headerRepeater' Runat='server' CellPadding='5' CellSpacing='15' GridLines='Vertical' HorizontalAlign='Left' RepeatColumns='30' RepeatDirection='Horizontal' RepeatLayout='Table' ShowFooter='False' ShowHeader='False' Visible = 'True' CssClass='DataList' DataKeyField ='Year'>
            <ItemTemplate>
                <asp:Label runat='server' ID='lblItemName' Text='<%# DataBinder.Eval(Container.DataItem, "Year") %>'>
                </asp:Label>
            </ItemTemplate>
        </asp:DataList>
    </td>
</tr>
<tr>

【问题讨论】:

  • 两个 cmets 都是正确的,所以我选择了第一个响应作为答案。谢谢你们!
  • DataTables 是与你一起工作的可怕结构,你真的应该努力用真正的类替换 DataTable 的任何用法,DataTable/DataSet 基本上是所有面向对象设计的混蛋。

标签: c# asp.net html datalist datalistitem


【解决方案1】:

当你说时你正在创建一个新的局部变量:

DataList headerRepeater = new DataList(); .

从 Page_Load 中删除这一行应该可以正常工作。

在触发 Page Load 事件时,数据列表已添加到 Page Control 集合中

【讨论】:

    【解决方案2】:
    // Why do you create a new variable named 'headerRepeater' here?    
    DataList headerRepeater = new DataList(); 
    headerRepeater.DataSource = ds.Tables[0];
    headerRepeater.DataKeyField = "Year";
    headerRepeater.DataBind();
    headerRepeater.Visible = true;
    

    删除以下行:

    DataList headerRepeater = new DataList(); 
    

    【讨论】:

      【解决方案3】:

      您正在创建 DataList 的新实例,但尚未将其添加到页面控件中。

      DataList headerRepeater = new DataList(); //The problem is here ControlThatWillHoldTheDataList.Controls.Add(headerRepeater); //My Addition
      headerRepeater.DataSource = ds.Tables[0];
      headerRepeater.DataKeyField = "Year";
      headerRepeater.DataBind();
      headerRepeater.Visible = true;

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-09-27
        • 1970-01-01
        • 2013-05-18
        • 2017-12-06
        • 1970-01-01
        • 2015-08-21
        • 2021-07-18
        相关资源
        最近更新 更多