在ListView中添加/删除列

时间:2016-06-06 12:08:32

标签: c# asp.net 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>

我使用数据表填充此ListView。 (无手动添加)。

假设我设置了一个条件,例如:

bool isTrue = true;
if(isTrue)
{
 //Add or remove some other column
}

因此,如果该条件为真,那么如何在运行时添加或删除列(标题和内容)?

C#Framework:4.5.2

4 个答案:

答案 0 :(得分:3)

如果条件是由页面的属性给出的:

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;
}

答案 1 :(得分:1)

只需删除您希望的索引处的列:

listView1.Columns.RemoveAt(3);

当你想要它时,只需插入它的名称:

listView1.Columns.Insert(3, "Column Name");

它将以其值返回。

答案 2 :(得分:1)

从Code 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();

答案 3 :(得分:0)

您可以随时添加隐藏可见性的列,当条件为真时,您可以更改每个列的可见性。

标题/列必须具有属性runat =“Server”和唯一ID