检查数据行中是否存在给定名称的列

8

如何检查在填充列表视图的结果中是否存在某个列?该列表视图是从存储过程中填充的。

这是我尝试过的但没有成功:

<%#  Container.DataItem.GetType().GetProperty("Phone")==null?"phone is null":"we have phone property" #>

或者我应该使用 e 而不是 Container.DataItem
3个回答

15

首先,如果变得复杂了,我会使用codebehind(我几乎总是使用它)。在这里,我将使用ListView的ItemDataBound事件,该事件会为每个项目触发:

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

这使得代码更易读、更易于维护、更易于调试和类型更加安全。


3
你可以在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();
            }
        }
    }

希望这可以帮到您!

0

另外,我找到了一个解决方案:

    public bool CheckProperty(string property_name)
    {

        try
        {
            Eval(property_name);
        }
        catch { return false; }
        return true;

    }

2
不要将 Try-Catch 用作逻辑运算符。这非常低效。 - Tim Schmelter
1
不是 Try-Catch 影响性能,而是异常可能会影响性能。由于您在此处循环许多带有多个列的项目,因此这确实可能是性能关键。但是,即使它不会影响性能,也是一个不好的习惯。不,异常从来都不是正常流程控制的正确工具。异常只应用于指示函数/方法由于外部原因无法履行其合同。 - Tim Schmelter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接