一般的な問い合わせデザイナのソースコードを見てきました。グリッドにフィールドを並べ替える上/下ボタンがあります。ビューは、[並べ替え句がありません。
public PXSelect<GIFilter, Where<GIFilter.designID, Equal<Current<GIDesign.designID>>>> Parameters;
のOrderByをLineNbrフィールドがキーフィールドであるため、必要ありません - システムが自動的にキーフィールドでレコードを順序付けます。
public abstract class lineNbr : IBqlField { }
[PXDBInt(IsKey = true)]
[PXDefault]
[PXLineNbr(typeof(GIDesign))]
[PXParent(typeof(Select<GIDesign,
Where<GIDesign.designID, Equal<Current<GIFilter.designID>>>>))]
public virtual int? LineNbr { get; set; }
ボタンのコードは次のようになります。
[PXButton(ImageKey = Sprite.Main.ArrowUp, Tooltip = ActionsMessages.ttipRowUp)]
[PXUIField(DisplayName = ActionsMessages.RowUp, MapEnableRights = PXCacheRights.Update)]
protected void moveUpFilter()
{
if (this.Parameters.Current == null)
return;
GIFilter prev = PXSelect<GIFilter, Where<GIFilter.designID, Equal<Current<GIDesign.designID>>, And<GIFilter.lineNbr, Less<Current<GIFilter.lineNbr>>>>, OrderBy<Desc<GIFilter.lineNbr>>>.Select(this);
if (prev != null)
this.SwapItems(this.Parameters.Cache, prev, this.Parameters.Current);
}
[PXButton(ImageKey = Sprite.Main.ArrowDown, Tooltip = ActionsMessages.ttipRowDown)]
[PXUIField(DisplayName = ActionsMessages.RowDown, MapEnableRights = PXCacheRights.Update)]
protected void moveDownFilter()
{
if (this.Parameters.Current == null)
return;
GIFilter next = PXSelect<GIFilter, Where<GIFilter.designID, Equal<Current<GIDesign.designID>>, And<GIFilter.lineNbr, Greater<Current<GIFilter.lineNbr>>>>, OrderBy<Asc<GIFilter.lineNbr>>>.Select(this);
if (next != null)
this.SwapItems(this.Parameters.Cache, next, this.Parameters.Current);
}
SwapItems
機能は、すべての移動アップ/の間で共有されているアクションを下に移動:
private void SwapItems(PXCache cache, object first, object second)
{
object temp = cache.CreateCopy(first);
foreach (Type field in cache.BqlFields)
if (!cache.BqlKeys.Contains(field))
cache.SetValue(first, field.Name, cache.GetValue(second, field.Name));
foreach (Type field in cache.BqlFields)
if (!cache.BqlKeys.Contains(field))
cache.SetValue(second, field.Name, cache.GetValue(temp, field.Name));
cache.Update(first);
cache.Update(second);
}
は最後に、ビットがありますASPXコード内のJavaScriptコードを使用することができます。機能を正しく動作させるには、それが欠けているかもしれません。私はそれが何をやっているのかはっきりしていませんが、エディタでSM208000.aspxを開き、commandResult
を探すことをお勧めします。また、上/下をサポートするグリッドに定義されているCallbackCommandsもチェックしてください。
ありがとうございます。最終的には、最初のビューで「Order By」を削除し、移動方法を上記のものに近づけるように更新しました。 javascriptメソッドは、移動後に選択された現在の行をそのまま維持するので、上/下をクリックし続けることができます。 –
@JeffWilliamsはフォローアップのおかげで – Gabriel