2008-11-26 10 views

उत्तर

1

आप अपने LINQ से SQL फ़ाइल में सार्वजनिक गुणों के क्रम को संशोधित करके ऐसा कर सकते हैं।

उदाहरण के लिए, मैं Northwind.designer.cs में गया जो कि मेरी स्वत: जेनरेट की गई LINQ SQL फ़ाइल में थी और सार्वजनिक आंशिक श्रेणी श्रेणी में सार्वजनिक संपत्ति श्रेणी नाम के ऊपर उत्पाद नाम की सार्वजनिक संपत्ति को स्थानांतरित कर दिया। फिर मैंने पुनः संकलित किया और डिफ़ॉल्ट टेम्पलेट ने मेरे नए ऑर्डर में कॉलम प्रदर्शित किए।

बेशक, इसका मतलब है कि आपका संपादन स्वत: जेनरेट कोड और यदि आप इसे पुन: उत्पन्न करते हैं, तो आपके परिवर्तन गुम हो जाते हैं, इसलिए यह तकनीक खतरे के बिना नहीं है।

1

आपको डायनामिकडेटा फ़ोल्डर में एक कस्टम पेज बनाना है।

  • कि आप एक कस्टम पेज बनाएँ "DynamicData \ CustomPages" फ़ोल्डर
  • तहत कॉलम के आदेश को अनुकूलित करना चाहते हैं अपनी मेज नाम के रूप में एक ही नाम है जो किसी फ़ोल्डर बनाएँ:

    ये कदम उठाएँ "डायनामिकडेटा \ कस्टमपृष्ठ \" तालिका नाम के साथ फ़ोल्डर] "फ़ोल्डर के अंतर्गत।

    • मैं उपरोक्त फ़ोल्डर में "डायनेमिकडाटा \ पेज टेम्पलेट्स" से मौजूदा "List.aspx" फ़ाइल की प्रतिलिपि बनाता हूं।
  • aspx फ़ाइल खोलें और GridView नियंत्रण संशोधित करने के लिए "AutoGenerateColumns = 'असत्य'"
  • GridView के अंदर कॉलम खंड, में अपने स्तंभ का नाम "DataField" विशेषता मान के साथ "DynamicControl" नियंत्रण जोड़ने आदेश जो आप चाहते हैं।

यहाँ ScottHa से एक स्क्रीनकास्ट है: http://www.asp.net/learn/3.5-SP1/video-293.aspx

2

प्रति this धागा के रूप में - आप गतिशील डेटा वायदा dll में ColumnOrderAttribute उपयोग कर सकते हैं। आप कोडेप्लेक्स से वायदा पकड़ सकते हैं।

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(); 
} } 
1

का उपयोग कर से बचने के लिए इस प्रकार गतिशील डेटा वायदा 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;} 
} 
+0

बस मुझे जो चाहिए .. धन्यवाद! – ArjanP

11

.NET 4.0 में विचार करेंगे, 4 का उपयोग।गतिशील डेटा dll 0 रिहाई, तो आप ऐसा जैसे डेटा एनोटेशन सेट कर सकते हैं:

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

[Display(Name = "Last Mod", Order = 40)] 
public object DateModified { get; private set; } 
1

मैं एक पुराने सवाल का जवाब रहा हूँ क्योंकि मुझे लगता है कि संभव समाधान ढांचे के नए संस्करण में बदल दिया है।

ऐसा लगता है कि डिस्प्ले (ऑर्डर) अब किसी भी विशेष कार्यवाही के बिना (सीधे वेब डेवलपर 2010 पर .NET 4.0) के रूप में काम करता है।

उदाहरण:

[Display(Order = 50)] 

एक महत्वपूर्ण बात यह सही ऑब्जेक्ट नाम की जाँच करने के foreignkey मैप करने के लिए है:

public object Operatore { get; set; } 
:

एक परियोजना में

एक क्षेत्र के रूप इकाई कक्षा में अनुवाद OperatoreID

विदेशीकी की स्रोत तालिका का संचालन किया जा रहा है; एक ही टेबल पर दूसरे संदर्भ के लिए इसे कुछ और कुछ मिल जाएगा।

संबंधित मुद्दे