0

WebGrid 列にいくつかの連結フィールドを表示したいのですが、連結フィールドに null 値があるとこのエラーが発生します

SQL クエリ:

 SELECT *, T.Name AS Title, PT.Name AS PropertyType
 FROM Properties AS P
 LEFT OUTER JOIN Owners_Properties AS OP ON OP.PropertyId = P.PropertyId
 LEFT OUTER JOIN Owners AS O ON O.OwnerId = OP.OwnerId
 LEFT OUTER JOIN PropertyTypes AS PT ON PT.PropertyTypeId = P.PropertyTypeId
 LEFT OUTER JOIN Titles AS T ON T.TitleId = O.TitleId      
 WHERE P.CondoId=@0 AND P.PropertyId=@1

HTML マークアップ:

propertyGrid.Column("Propriétaire", format: (item) => item.Title+ ' ' + item.FirstName+ ' ' + item.LastName)

この問題は、「連続する 2 つのフィールド」が NULL の場合に発生します

次の方法で HTML コードを変更しようとしました。

 propertyGrid.Column("Owner", format: (item) => @Html.Raw((item.Title=!null) ? (item.Title+ ' ') : "")+ (item.FirstName=!null) ? (item.FirstName+ ' ') : "")+ ((item.LastName=!null) ? item.LastName : "")))

これらの NULL 値を返さないようにすることも可能ですが、SQL クエリ側では成功しませんでした。人生は難しいです;-)

4

2 に答える 2

1

ビュー モデルを使用し、値をフォーマットするプロパティを追加することをお勧めします。

public string FormattedOwner
{
    get
    {
        return string.Format("{0} {1} {2}", Title, FirstName, LastName);
    }
}

ビューで、この新しいビュー モデル プロパティを使用して、列を次のようにバインドします。

propertyGrid.Column(columnName: "FormattedOwner", header: "Propriétaire")

グッド プラクティスに従ってビュー モデルを使用したくない場合は、いつでもビューをスパゲッティ コードに変換できます。

propertyGrid.Column(
    header: "Propriétaire",
    format: @<text>@string.Format("{0} {1} {2}", item.Title, item.FirstName, item.LastName)</text>
)    
于 2012-09-30T09:03:50.703 に答える
0

=を置き換えてください!HTML マークアップの != によって。

SQL では、ISNULL (SQL Server)、IFNULL (MySQL) などを使用して、他のデータベースで NULL を "" に置き換えることができます。

例: SELECT ISNULL(T.Name, '') AS Title, ...

于 2012-09-30T19:38:00.000 に答える