DataBinder.Eval数据项为空

时间:2013-08-09 13:27:10

标签: c# asp.net databinder

当DataItem为空时,我无法确定如何隐藏','。

基本上,我有一个显示已注册地址的表格行,并使用以下技术填充:

<%# DataBinder.Eval(Container.DataItem, "Address_Line_1" )%>,
<%# DataBinder.Eval(Container.DataItem, "Address_Line_2")%>,
<%# DataBinder.Eval(Container.DataItem, "TOWNLAND")%>,                          
<%# DataBinder.Eval(Container.DataItem, "CITY")%>,
<%# DataBinder.Eval(Container.DataItem, "STATE")%>,

现在,如果上面的一个或多个DataItem返回Empty,那么就在前端 它显示为

  

地址1 ,,, CITY ,,

我尝试了以下隐藏逗号(','),但我一直收到错误

  

失踪')'   在'If'陈述的第一行

<%#IIf(IsDBNull(DataBinder.Eval(Container.DataItem, "STATE")) OrElse 

String.IsNullOrEmpty(DataBinder.Eval(Container.DataItem, "STATE")) , "" , 

DataBinder.Eval(Container.DataItem, "STATE") & ",")%>

我不确定我的'if'陈述是否错误或不能如上所述?

任何人都有关于上述或任何其他隐藏逗号的替代方法的建议,如果是NULL值?

4 个答案:

答案 0 :(得分:10)

这应该有效:

<%# DataBinder.Eval(Container.DataItem, "Address_Line_1") != null && !String.IsNullOrEmpty(DataBinder.Eval(Container.DataItem, "Address_Line_1").ToString()) ? DataBinder.Eval(Container.DataItem, "Address_Line_1").ToString() + "," : "" %>

条件? true:false

答案 1 :(得分:2)

您可以在代码隐藏中调用方法,这样您就可以从标记中取出这个逻辑,如下所示:

protected string GetAddress()
{
    string boundAddressValue = Eval("Address_Line_1") as string;

    return !String.IsNullOrEmpty(boundAddressValue) ? boundAddressValue : String.Empty;
}

现在你可以通过这样的标记来调用它:

<%# GetAddress() %>

注意:这种方法的缺点是如果你在数据绑定之外调用GetAddress,那么Eval会爆炸,但它会使你的标记更清晰,你可以获得编辑器,以帮助解决语法问题。

答案 2 :(得分:1)

只需使用

(DataBinder.Eval(e.Row.DataItem, "ColumnName") ?? "AnyValueAccordingToColumnDataTyle")

答案 3 :(得分:0)

有点晚了,但是像

这样的东西呢
protected string GetAddress()
{
    var parts = new List<string>(new string[] 
    {
         Eval("Address_Line_1") as string,
         Eval("Address_Line_2") as string,
         Eval("TOWNLAND") as string,                          
         Eval("CITY") as string,
         Eval("STATE") as string
    });

    return string.Join(", ", parts.Where(x => !string.IsNullOrEmpty(x)).ToArray());
}

//或

protected string JoinEval(string delim, param string[] fields)
{
    var parts = new List<string>();
    foreach (string field in fields)
    {
         string value = Eval(field).ToString();
         if (!string.IsNullOrEmpty(value))
              parts.Add(value);
    }

    return string.Join(delim, parts.ToArray());
}