11

動的データのフィールドの順序を選択できるかどうか(もちろん、各テーブルのテンプレートをカスタマイズせずに)を知っている人はいますか?

ありがとう !

4

7 に答える 7

12

.NET 4.0では、ダイナミックデータdllの4.0リリースを使用して、次のようにデータ注釈を設定できます。

[Display(Name = " Mission Statement", Order = 30)]
public object MissionStatement { get; set; }

[Display(Name = "Last Mod", Order = 40)]  
public object DateModified { get; private set; }
于 2010-05-19T22:02:13.597 に答える
2

このスレッドに従って- 動的データ先物 dll で ColumnOrderAttribute を使用できます。codeplex から先物を取得できます。

于 2008-12-30T23:02:17.123 に答える
1

これを行うには、LINQtoSQLファイルのパブリックプロパティの順序を変更します。

たとえば、自動生成されたLINQ to SQLファイルであるNorthwind.designer.csにアクセスし、Productsという名前のパブリックプロパティをパブリック部分クラスCategoryのパブリックプロパティCategoryNameの上に移動しました。次に、再コンパイルすると、デフォルトのテンプレートに新しい順序で列が表示されました。

もちろん、これは自動生成されたコードを編集することを意味し、それを再生成すると変更が失われるため、この手法には危険が伴います。

于 2008-12-12T00:15:28.627 に答える
1

DynamicDataフォルダーにカスタムページを作成する必要があります。

手順は次のとおりです。

  • 「DynamicData\CustomPages」フォルダの下に、列の順序をカスタマイズするテーブル名と同じ名前のフォルダを作成します
  • 「DynamicData\CustomPages\[テーブル名のフォルダー]」フォルダーの下にカスタムページを作成します。
    • 既存の「List.aspx」ファイルを「DynamicData\PageTemplates」から上のフォルダーにコピーするだけです。
  • aspxファイルを開き、GridViewコントロールを「AutoGenerateColumns='false'」に変更します
  • GridViewの列セクション内で、「DataField」属性値を持つ「DynamicControl」コントロールを、必要な順序で列の名前に追加します。

これがScottHaからのスクリーンキャストです: http ://www.asp.net/learn/3.5-SP1/video-293.aspx

于 2008-12-23T17:46:08.343 に答える
1

Dynamic Data futures dll の使用を避けるために、次のように独自の ColumnOrder 属性をロールすることができます。

[AttributeUsage(AttributeTargets.Property)]
public class ColumnOrderAttribute : Attribute
{
    public int Order { get; private set; }
    public ColumnOrderAttribute() { Order = int.MaxValue; }
    public ColumnOrderAttribute(int order) { Order = order; }
    public static ColumnOrderAttribute Default = new ColumnOrderAttribute();
}

そして、IAutoFieldGenerator を実装するクラスでは、

public static class ExtensionMethods
{
    public static int GetOrder (this MetaColumn column)
    {
        var orderAttribute = column.Attributes.OfType<ColumnOrderAttribute>().DefaultIfEmpty(ColumnOrderAttribute.Default).Single();
        return orderAttribute.Order;
    }
}

public ICollection GenerateFields(Control control)
{
    var fields = new List<DynamicField>();
    var columns = _table.Columns.OrderBy(column => column.GetOrder());
    foreach (var column in columns)
    {
        if (!column.Scaffold) { continue; }
        fields.Add(new DynamicField {DataField = column.Name});
    }
}

そして最後に、あなたの使い方は次のようになります

[MetadataType(typeof(CustomerMetadata))]
public partial class Customer {}

public class CustomerMetadata
{
    [ColumnOrder(1)]
    public object FirstName {get;set;}
    [ColumnOrder(2)]
    public object LastName {get;set;}
}
于 2009-09-10T06:03:26.353 に答える
1

GridView には ColumnsGenerator プロパティがあり、カスタム ルール (属性、メタ情報など) に基づいてフィールドの順序を設定できる IAutoFieldGenerator インターフェイスの GenerateFields メソッドを実装して使用します。

protected override void OnInit(EventArgs e)
{
    ...
    this.gvItemsList.ColumnsGenerator = new EntityFieldsGenerator(CurrentDataSource.CurrentTableMetadata);
    ...
}

public class EntityFieldsGenerator : IAutoFieldGenerator {
...
public ICollection GenerateFields(Control control)    
{
    // based on entity meta info
    var fields = from item in this.entityMetadata.Columns
                 where this.IncludeColumn(item.Value)
                 orderby item.Value.Order
                 select new DynamicField
                 {
                     DataField = item.Value.Column.Name,
                     HeaderText = item.Value.DisplayName,
                     DataFormatString = item.Value.DataFormatString,
                     UIHint = GetColumnUIHint(item.Value)
                 };
    return fields.ToList();
} }
于 2009-08-11T15:07:19.663 に答える
1

フレームワークの新しいバージョンで可能な解決策が変更されたように思われるため、古い質問に答えています。

Display(Order) は、特定の回避策なしで (.NET 4.0 上の Visual Web Developer 2010) 要求どおりに直接動作するようになりました。

例:

[Display(Order = 50)]

重要なことは、外部キーをマップするために正しいオブジェクト名を確認することです。

あるプロジェクトでは、フィールド OperatoreID はエンティティ クラスで次のように変換されます。

public object Operatore { get; set; }

外部キーのソース テーブルを操作します。同じテーブルの 2 番目の参照では、1 のような値が取得されます。

于 2011-04-10T09:22:59.283 に答える