2010-12-29 5 views
0

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

Ниже приведены коды отношения к вопросу ...

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> 
+0

Оба замечания были правильными, поэтому я выбрал первый ответ как ответ. Спасибо вам обоим!! – badpanda

+0

DataTables - это ужасающие структуры для работы с вами, вы действительно должны работать, чтобы заменить любое использование DataTable истинными классами, DataTable/DataSet в основном обесценивает весь объектно-ориентированный дизайн. –

ответ

3

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

DataList headerRepeater = new DataList(); . 

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

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

1

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

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(); 
Смежные вопросы