2012-04-27 11 views
5

मैं http://msdn.microsoft.com/en-us/library/aa480736.aspx में पाया SortableSearchableList वर्ग को लागू किया है और इसे करने के लिए एक क्रमबद्ध विधि को शामिल किया है साथ DataGridView करने के लिए बाध्य:इस प्रकार क्रमित करने योग्य BindingList कार्यक्रम संबंधी प्रकार

public void Sort(PropertyDescriptor prop, ListSortDirection direction) 
{ 
ApplySortCore(prop, direction); 
} 

इस वर्ग के काम करता है जब से किसी पर क्लिक करके मेरी DataGridView छँटाई कॉलम हेडर, लेकिन मुझे किसी निर्दिष्ट कॉलम के लिए क्रमबद्ध रूप से सॉर्ट विधि को कॉल करने में सक्षम होना चाहिए (इस उदाहरण में सॉर्ट बटन नियंत्रण का उपयोग करके)। ऑनलाइन पाया गया कुछ कोड उदाहरण कॉलम के लिए PropertyDescriptor प्राप्त करने और ApplySortCore विधि के साथ इसे पास करने का सुझाव देते हैं। मुझे अभी तक काम करने के लिए यह नहीं मिला है। मैं या तो मेरे DataGridView या SortableSearchableList की PropertyDescriptorCollection गुण प्राप्त कर सकता हूं, लेकिन मेरे निर्दिष्ट कॉलम/सदस्य के लिए PropertyDescriptor प्राप्त करने के लिए ढूँढें विधि नहीं मिल सकती है। यहां मेरा बाकी कोड है:

namespace SortableBindingListTest 
{ 
public partial class Form1 : Form 
{ 
    private SortableSearchableList<Tags> alarms = new SortableSearchableList<Tags>(); 
    public Form1() 
    { 
     InitializeComponent(); 
     alarms.Add(new Tags("some text", "1")); 
     alarms.Add(new Tags("more text", "2")); 
     alarms.Add(new Tags("another one", "3")); 
     dataGridView1.AutoGenerateColumns = false; 
     dataGridView1.AllowUserToAddRows = true; 
     dataGridView1.EditMode = DataGridViewEditMode.EditOnEnter; 
     dataGridView1.RowHeadersVisible = false; 
     dataGridView1.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; 
     DataGridViewTextBoxColumn alarmColumn = new DataGridViewTextBoxColumn(); 
     alarmColumn.DataPropertyName = "Alarm"; 
     alarmColumn.Name = "Alarm"; 
     alarmColumn.HeaderText = "Alarm"; 
     DataGridViewTextBoxColumn messageColumn = new DataGridViewTextBoxColumn(); 
     messageColumn.DataPropertyName = "Message"; 
     messageColumn.Name = "Message"; 
     messageColumn.HeaderText = "Message"; 
     dataGridView1.Columns.Add(alarmColumn); 
     dataGridView1.Columns.Add(messageColumn); 
     dataGridView1.DataSource = alarms; 
    } 

    private void sortButton_Click(object sender, EventArgs e) 
    { 
     // try getting properties of BindingList 
     PropertyDescriptorCollection listProperties = TypeDescriptor.GetProperties(alarms); 
     PropertyDescriptor alarmProp = listProperties.Find("Alarm", false); 
     // prop is null at this point, so the next line fails 
     alarms.Sort(alarmProp, ListSortDirection.Ascending); 
     // try getting properties of DataGridView column 
     PropertyDescriptorCollection dgvProperties = TypeDescriptor.GetProperties(dataGridView1); 
     PropertyDescriptor columnProp = dgvProperties.Find("Alarm", false); 
     // columnProp is null at this point, so the next line also fails 
     alarms.Sort(columnProp, ListSortDirection.Ascending); 
    } 
} 

public class Tags : INotifyPropertyChanged 
{ 
    private string _alarm; 
    private string _message; 
    public event PropertyChangedEventHandler PropertyChanged; 
    public Tags(string alarm, string message) 
    { 
     _alarm = alarm; 
     _message = message; 
    } 

    public string Alarm 
    { 
     get { return _alarm; } 
     set 
     { 
      _alarm = value; 
      this.NotifyPropertyChanged("Alarm"); 
     } 
    } 
    public string Message 
    { 
     get { return _message; } 
     set 
     { 
      _message = value; 
      this.NotifyPropertyChanged("Message"); 
     } 
    } 
    private void NotifyPropertyChanged(string name) 
    { 
     if (PropertyChanged != null) 
      PropertyChanged(this, new PropertyChangedEventArgs(name)); 
    } 
} 
} 

किसी भी मदद की सराहना की जाएगी।

उत्तर

5

प्रयास करें इस

dataGridView1.Sort(dataGridView.Columns[0],ListSortDirection.Ascending); 
+0

धन्यवाद, कि काम करता है! –

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