如何检查填充列表视图的结果中是否存在列? 列表视图是从存储过程填充的。
这是我尝试但没有成功的:
<%# Container.DataItem.GetType().GetProperty("Phone")==null?"phone is null":"we have phone property" #>
或者我应该使用 e 而不是 Container.DataItem ?
答案 0 :(得分:12)
首先,我会使用代码隐藏,如果它变得复杂(我几乎总是使用它)。在这里,我将使用为每个项目触发的ListView的ItemDataBound
event:
protected void ListView1_ItemDataBound(object sender, ListViewItemEventArgs e)
{
if (e.Item.ItemType == ListViewItemType.DataItem)
{
// assuming you have an ItemTemplate with a label where you want to show this
Label lblInfo = (Label) e.Item.FindControl("LblInfo");
DataRowView rowView = (DataRowView)e.Item.DataItem;
if (rowView.Row.Table.Columns.Contains("Phone"))
{
lblInfo.Text = "we have the phone property";
}
else
{
lblInfo.Text = "no phone available";
}
}
}
这使代码更具可读性,可维护性,可调试性和类型安全性。
答案 1 :(得分:2)
您可以在OnItemDataBound中查看。
protected void lstSample_OnItemDataBound(object sender, ListViewItemEventArgs e)
{
Label lblText = null;
Boolean isColumnExists = false;
if (e.Item.ItemType == ListViewItemType.DataItem)
{
DataRowView dr = (DataRowView)e.Item.DataItem;
isColumnExists = dr.DataView.Table.Columns.Contains("Hello");
lblText = (Label)e.Item.FindControl("lbltext");
if (isColumnExists)
{
lblText.Text = dr.Row["Hello"].ToString();
}
else
{
lblText.Text = dr.Row["Movies"].ToString();
}
}
}
希望这有帮助!
答案 2 :(得分:0)
另外,我找到了一个解决方案:
public bool CheckProperty(string property_name)
{
try
{
Eval(property_name);
}
catch { return false; }
return true;
}