Добавление и удаление столбцов в 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

659   4  

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

    Ничего не найдено.