Список данных в ASP.NET не будет отображаться?

Я работаю над динамическим созданием некоторых меток с использованием DataList в коде ASP.NET уже несколько дней и не могу на всю жизнь получить элемент управления для отображения на экране. Я совершенно уверен, что проблема заключается в какой-то небольшой синтаксической вещи или теге HTML, который я забыл установить. С помощью отладчика я подтвердил, что список данных фактически загружается в источник данных, и когда я просматриваю представление «дизайн» HTML-кода, элемент управления действительно отображается. Однако, когда я запускаю страницу, элемент управления не отображается. Любое понимание того, почему это происходит, будет очень признательно.

Ниже приведен код, относящийся к вопросу...

Частичный класс С#:

    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>

person badpanda    schedule 29.12.2010    source источник
comment
Оба комментария были правильными, поэтому я выбрал первый ответ в качестве ответа. Спасибо вам обоим!!   -  person badpanda    schedule 29.12.2010
comment
DataTables - это ужасные структуры для работы с вами, вам действительно следует работать над заменой любого использования DataTable истинными классами, DataTable/DataSet в основном разрушает весь объектно-ориентированный дизайн.   -  person Chris Marisic    schedule 29.12.2010


Ответы (3)


Вы создаете новую локальную переменную, когда говорите:

DataList headerRepeater = new DataList(); .

Удалите эту строку из Page_Load, страница должна работать нормально.

Список данных уже добавлен в коллекцию управления страницами к моменту запуска события загрузки страницы.

person Chandu    schedule 29.12.2010

// 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(); 
person decyclone    schedule 29.12.2010

Вы создаете новый экземпляр 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;

person Achilles    schedule 29.12.2010