2009-04-02 8 views
6

में DisplayNameAttribute का उपयोग करें, मैं एक वेब पेज पर एक ग्रिड व्यू में एक सूची बांधना चाहता हूं, लेकिन संपत्ति नामों को एनोटेशन के माध्यम से प्रदर्शित करने के तरीके को ओवरराइड करें। मैंने सोचा कि System.ComponentModel काम करेगा, लेकिन यह काम नहीं लग रहा है। यह केवल Windows के लिए है पृष्ठ पर ?:ASP.NET

using System.ComponentModel; 

namespace MyWebApp 
{ 
    public class MyCustomClass 
    { 
     [DisplayName("My Column")] 
     public string MyFirstProperty 
     { 
      get { return "value"; } 
     } 

    public MyCustomClass() {} 
} 

फिर फॉर्म्स: "। मेरे कॉलम"

protected void Page_Load(object sender, EventArgs e) 
{ 
    IList<MyCustomClass> myCustomClasses = new List<MyCustomClass> 
    { 
     new MyCustomClass(), 
     new MyCustomClass() 
    }; 

TestGrid.DataSource = myCustomClasses; 
TestGrid.DataBind(); 

}

यह बजाय स्तंभ शीर्ष लेख के रूप में "MyFirstProperty" के साथ renders क्या यह काम नहीं करना चाहिए?

उत्तर

2

क्या SirDemon ने कहा ...

जवाब नहीं प्रतीत होता है, आप नहीं कर सकते। कम से कम बॉक्स से बाहर नहीं।

System.Web.UI.WebControls.GridView परिलक्षित का उपयोग करता है संपत्ति का नाम:

protected virtual AutoGeneratedField CreateAutoGeneratedColumn(AutoGeneratedFieldProperties fieldProperties) 
{ 
    AutoGeneratedField field = new AutoGeneratedField(fieldProperties.DataField); 
    string name = fieldProperties.Name; //the name comes from a PropertyDescriptor 
    ((IStateManager) field).TrackViewState(); 
    field.HeaderText = name; //<- here's reflected property name 
    field.SortExpression = name; 
    field.ReadOnly = fieldProperties.IsReadOnly; 
    field.DataType = fieldProperties.Type; 
    return field; 
} 

जबकि System.Windows.Forms.DataGridView DisplayName का उपयोग करता है यदि उपलब्ध हो:

public DataGridViewColumn[] GetCollectionOfBoundDataGridViewColumns() 
{ 
    ... 
    ArrayList list = new ArrayList(); 
    //props is a collection of PropertyDescriptors 
    for (int i = 0; i < this.props.Count; i++) 
    { 
     if (...) 
     { 
      DataGridViewColumn dataGridViewColumnFromType = GetDataGridViewColumnFromType(this.props[i].PropertyType); 
      ... 
      dataGridViewColumnFromType.Name = this.props[i].Name; 
      dataGridViewColumnFromType.HeaderText = !string.IsNullOrEmpty(this.props[i].DisplayName) ? this.props[i].DisplayName : this.props[i].Name; 
     } 
    } 
    DataGridViewColumn[] array = new DataGridViewColumn[list.Count]; 
    list.CopyTo(array); 
    return array; 
} 

दुर्भाग्य से, जब तुम CreateAutoGeneratedColumn को ओवरराइड कर सकते हैं, न तो अनुपलब्ध डिस्प्लेनाम और न ही अंतर्निहित संपत्ति डिस्क्रिप्टर पास हो जाता है, और आप CreateAutoGeneratedColumns को ओवरराइड नहीं कर सकते (हालांकि आप कॉलम बना सकते हैं)।

इसका मतलब है कि आपको अपने आप को और किसी अन्य स्थान पर परिलक्षित गुणों को फिर से शुरू करना होगा।

2

यदि आप ग्रिड व्यू में हेडर टेक्स्ट की परवाह करते हैं, तो बस आपके द्वारा बाध्य किए गए प्रत्येक फ़ील्ड की शीर्षलेख टेक्स्ट का उपयोग करें। यदि आप कॉलम को स्वत: उत्पन्न कर रहे हैं, तो आप ग्रिड व्यू को बाध्य करने के बाद ही हेडरटेक्स्ट सेट करें।

यदि आप एक ग्रिड व्यू चाहते हैं जो आपके बाध्य वर्ग के गुणों पर रखे गए कुछ विशेषताओं को ध्यान में रखता है, तो मेरा मानना ​​है कि आपको अपना खुद का ग्रिड व्यू बनाना होगा।

मैं गलत हो सकता हूं, लेकिन मैंने नियंत्रण विक्रेताओं (कम से कम टेलीरिक, जेनस सिस्टम्स और इंफ्राजिस्टिक्स) से कोई एएसपी.NET ग्रिड नहीं देखा है। यदि आप ऐसा करते हैं, तो शायद उन्हें विचार बेच दें।

0

अब आप इसे asp.net mvc2 पर कर सकते हैं। यह

+0

मेरे लिए – darcyq

1

क्या आप .NET4 का उपयोग कर रहे हैं, आपको ग्रिड व्यू पर सही गतिशीलता सेट करने के लिए क्या करना है।

+0

http://msdn.microsoft.com/en-us/library/system.web.ui.datacontrolextensions.enabledynamicdata(v=vs.110).aspx grid1 काम नहीं करता।सक्षम करें डायनामिकडेटा (टाइपफ़ोफ़ (टाइपएक्स)) – jmw

2

.net 4 या बाद में उपयोग करते समय आप gridview1.enabledynamicdata (typeof (mytype) का उपयोग कर सकते हैं)। मैंने उन सभी प्रकारों को नहीं देखा है जिनका आप उपयोग कर सकते हैं लेकिन मुझे पता है कि [displayname ("somename")] अच्छी तरह से काम करता है लेकिन [browsable (false)] ग्रिड से कॉलम को नहीं छोड़ता है। ऐसा लगता है कि एमएस से एक बुनाई एक पर्ची की तरह दिखता है। कम से कम आप आसानी से कॉलम नामों का नाम बदल सकते हैं और एक कॉलम छोड़ने के लिए मैं सिर्फ एक संपत्ति का उपयोग करने के बजाय एक चर घोषित कर सकता हूं। इसका एक ही प्रभाव है ...

बस वैसे, कॉलम बनाने के लिए डिजाइनर का उपयोग करना आसान तरीका है, लेकिन केवल एक अलग कॉलम नाम दिखाने के लिए विशेष रूप से कई क्षेत्रों के साथ कक्षाओं के साथ समय लगता है।

+0

यह मेरे लिए काम करता है, किसी अन्य व्यक्ति के लिए परेशानी होने के लिए सिर्फ एक टिप्पणी है, सुनिश्चित करें कि आप इसे ग्रिड व्यू पर उपयोग करते हैं क्योंकि ऐसा लगता है कि यह डेटाग्रिड पर काम नहीं कर रहा है। लेकिन यह मेरी समस्या तय :) –