У меня есть ListView внутри другого ListView, и я хотел бы скрыть столбец таблицы во внутреннем ListView всякий раз, когда передается конкретный параметр. Учитывая приведенную ниже настройку, как мне скрыть столбец идентификатора (как заголовок, так и данные), если URL-адрес содержит «...? Id = no»?
<asp:ListView ID = "ProcedureListView" runat = "server">
<LayoutTemplate>
<asp:PlaceHolder ID = "itemPlaceHolder" runat = "server" />
</LayoutTemplate>
<ItemTemplate>
<h4>
<%#Eval("PROCEDURE_CODE") %>
</h4>
<asp:ListView ID = "BenefitListView" runat = "server" DataSource='<%#Eval("benefits") %>'>
<LayoutTemplate>
<table cellpadding = "5" class = "indent">
<tr class = "tableHeader">
<td>
ID
</td>
<td>
Benefit
</td>
</tr>
<asp:PlaceHolder ID = "itemPlaceHolder" runat = "server" />
</table>
</LayoutTemplate>
<ItemTemplate>
<tr>
<td>
<%#Eval("benefit_id")%>
</td>
<td>
<%#Eval("benefit_name")%>
</td>
</tr>
</ItemTemplate>
</asp:ListView>
</ItemTemplate>
</asp:ListView>





вы можете заключить их в заполнитель, а затем динамически установить видимость заполнителя, чтобы удалить столбец ... (вам понадобятся два заполнителя)
вы можете разместить свой код позади? как вы привязываете данные своего вложенного ListView?
Моя проблема - вместо этого я должен был пройтись по коллекции элементов, поскольку каждый внутренний элемент управления существует в каждой строке (элементе).
вы можете сделать следующее:
<% if (Request.QueryString["id"] != "no") { %>
<td>
<%#Eval("benefit_id")%>
</td>
<% } %>
<td>
<%#Eval("benefit_name")%>
</td>
и проделайте то же самое с заголовком.
edit: вам не ясно, но из предыдущего комментария, если вы хотите сделать это в коде позади, вы должны поместить заголовок идентификатора и данные идентификатора в элемент управления сервера меток. затем вы можете проверить строку запроса в коде позади, а при привязке данных вы можете установить для свойства visible значение false.
здесь есть несколько вариантов, это действительно зависит от того, что вам удобнее всего.
К сожалению, когда вы пытаетесь сделать это в заголовке, возникает такая ошибка: коллекцию Controls нельзя изменить, потому что элемент управления содержит блоки кода (т.е. <% ...%>).
Изменить ответ: проблема в том, что это вложенный ListView, поэтому я не могу получить доступ к чему-либо внутри него из кода позади. Если бы это был простой ListView, было бы несколько способов сделать это, но все они, похоже, упали во вложенном ListView.
вы имеете в виду, что дизайнер выдает ошибку? так что это означает только то, что вам нужно отредактировать код в представлении html. он должен работать правильно, хотя я еще не пробовал.
вы можете указать, что вы пробовали до сих пор, чтобы ответы не были лишними.
добавьте класс css в теги HTML и из кода вставьте класс css на страницу следующим образом
<td id='' class='hideMe'>
ID
</td>
код позади, в событии предварительной отрисовки
if (id==123){
// please refer to help file for exact syntax
// but essentially you will be injecting
// <style type='text/css'>
// .hideMe{display:none;}
// </style>
}
В качестве альтернативы вы можете включить указанный выше класс css в свою таблицу стилей и добавлять его только к тегам, которые вы хотите скрыть, на основе идентификатора.
если вы пытаетесь сделать это из кода позади, вы можете сделать это:
В событии onBind для внешнего ListView вы найдете внутренний элемент управления listview, а затем найдете нужную метку и измените свойство visible на false. Я ответил на ваш другой вопрос.
удачи!
У меня проблемы с динамической частью. Если я помещаю его в заполнитель с именем «myPH», а затем выполняю процедуру ProcedureListView.FindControl («myPH»), он ничего не возвращает.