现在我的代码中有一个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
答案 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