jTable (www.jTable.org) を使用して、ASP.NET で単純なグリッドに取り組んでいます。これは「居住者」のリストを含むページで、データベースの FACILITY テーブルから入力された「FacilityFrom」というフィールドがあります。「居住者」jTableには、「オプション」属性を使用し、「施設」SQLテーブルからプルするフィールドがあります。新しいレコードを追加するときに、最初のデフォルト値が「(NONE)」であるドロップダウンリストが必要です。
私はいくつかのMSSQLマジックを行い、デフォルト値を表すレコードを作成しました(データベース内のそのフィールドは文字通り「(NONE)」です。次に、ドロップダウンにデータを入力するときに行います
select FacilityID,Name from FACILITY where Name = '(NONE)'
UNION
select FacilityID,Name from FACILITY where Name <> '(NONE)'
私はそれが醜いことを認識しています (気密にするために必要な一意の制約を設定しました) が、クエリは期待どおりに機能し、「(NONE)」オプションを一番上に置きます。しかし、何らかの理由で、jTable は独自に並べ替えの魔法を実行し、それを一番下に配置しています! 上記のselectステートメントを逆にしても、それは一番下にありますか? GetFacilityOptions という名前の WebMethod にブレークポイントを設定しても、結果が希望どおりであることは明らかです (NONE) は常にリストのインデックス 0 にあります。jquery バインディングで何かが変更されているようです。
とにかく、jTable のドキュメントで defaultValue 属性を見つけて、それで問題が解決すると思ったのですが、それでも効果はありませんか? HTML は以下のとおりです。
FacilityFromID: {
title: 'Facility',
options: '/Residents.aspx/GetFacilityOptions',
defaultValue: '(NONE)'
},
コード ビハインドは次のとおりです。
[WebMethod(EnableSession = true)]
public static object GetFacilityOptions()
{
try
{
var facilities = BusinessObjects.DataAcesss.GetAllFacilities().Select(c => new { DisplayText = c.Name, Value = c.FacilityID });
//BREAKPOINT SAYS '(NONE)' IS AT INDEX 0 HERE!!
return new { Result = "OK", Options = facilities };
}
catch (Exception ex)
{
return new { Result = "ERROR", Message = ex.Message };
}
}
アイデアや提案はありますか?本当にありがとう!