Добавление и удаление столбцов в ListView
Теперь у меня есть ListView в моем коде.
<asp:ListView ID="ListView1" runat="server" OnPagePropertiesChanging="OnPagePropertiesChanging">
<LayoutTemplate>
<table class="global-table">
<tr runat="server">
<th>Header1</th>
<th>Header2</th>
<th>Header3</th>
<th>Header4</th>
</tr>
<asp:PlaceHolder runat="server" ID="itemPlaceholder"></asp:PlaceHolder>
</table>
</LayoutTemplate>
<ItemTemplate>
<tr runat="server">
<td><%# DataBinder.Eval(Container.DataItem, "Column1") %></td>
<td><%# DataBinder.Eval(Container.DataItem, "Column2") %></td>
<td><%# DataBinder.Eval(Container.DataItem, "Column3") %></td>
<td><%# DataBinder.Eval(Container.DataItem, "Column4") %></td>
</tr>
</ItemTemplate>
</asp:ListView>
Я заполняю это представление списка с помощью таблицы данных. (Никаких ручных дополнений).
Предположим, что я задаю условие, например:
bool isTrue = true;
if(isTrue)
{
//Add or remove some other column
}
Итак, если это условие верно, как я могу добавлять или удалять столбцы (как заголовок, так и содержимое) во время выполнения?
C# Framework: 4.5.2
4 ответов:
Если условие задано свойством страницы:
protected bool IsColumnVisible { get { return ... } }Вы можете использовать его в разметке, чтобы показать / скрыть столбец для обычных строк:
<asp:ListView ID="ListView1" runat="server" OnPagePropertiesChanging="OnPagePropertiesChanging" OnPreRender="ListView1_PreRender"> <LayoutTemplate> <table class="global-table"> <tr runat="server"> <th>Header1</th> <th>Header2</th> <th>Header3</th> <th id="thColumn4" runat="server">Header4</th> </tr> <asp:PlaceHolder runat="server" ID="itemPlaceholder"></asp:PlaceHolder> </table> </LayoutTemplate> <ItemTemplate> <tr runat="server"> <td><%# DataBinder.Eval(Container.DataItem, "Column1") %></td> <td><%# DataBinder.Eval(Container.DataItem, "Column2") %></td> <td><%# DataBinder.Eval(Container.DataItem, "Column3") %></td> <td runat="server" visible='<%# IsColumnVisible %>'><%# DataBinder.Eval(Container.DataItem, "Column4") %></td> </tr> </ItemTemplate> </asp:ListView>Поскольку выражения привязки данных не работают в LayoutTemplate, вы можете показать/скрыть ячейку заголовка в коде:
protected void ListView1_PreRender(object sender, EventArgs e) { ListView1.FindControl("thColumn4").Visible = IsColumnVisible; }
Просто удалите столбец в индексе, который вы хотите:
listView1.Columns.RemoveAt(3);Когда вы хотите его вернуть, просто вставьте его с именем:
listView1.Columns.Insert(3, "Column Name");Он вернется со своими значениями.
Из кода Behinde вы можете вставить новый элемент как... Вставить
string[] row={col1 value, col2 value, col3 value .....} var newItem=new ListViewItems(row) listViewItem.Items.Add(newItem)Клиентская Сторона.
$(".row").parents("tr").append("<tr><td>col1 value</td><td>col 2 value</td><td>col3 value</td></tr>");Удалить о событии ListView
protected void listview_OnItemCommand(o as sender,e eventarg) { var row=(ListViewDataItem)e.Item; listView.Items.Remove(row); }Клиентская Сторона
$(".row").parents("tr").remove();
Вы можете всегда добавлять столбцы со скрытой видимостью, и когда ваше условие истинно, вы изменяете видимость для каждого из них.
Заголовки / столбцы должны иметь атрибут runat= "Server" и уникальный идентификатор
Comments