2015-06-18 22 views
2

我有一個對象列表(所有字符串)的填充DataGridView但是我無法使用列標題進行排序。我一直在閱讀SortableBindingList來解決這個問題,但不幸的是,由於我只學習了幾天的代碼,我無法理解如何實現它。任何意見,讓我再次移動將不勝感激(請保持簡單,儘可能)。c#如何從列表中創建一個SortableBindingList <T>

這裏是我到目前爲止的代碼

{ 
public class Product 
{ 
    public string itemCode; 
    public string description; 
    public string currentCount; 
    public string onOrder; 

    public string ItemCode 
    { 
     get 
     { 
      return itemCode; 
     } 
     set 
     { 
      itemCode = value; 
     } 
    } 
    public string Description 
    { 
     get 
     { 
      return description; 
     } 
     set 
     { 
      description = value; 
     } 
    } 
    public string CurrentCount 
    { 
     get 
     { 
      return currentCount; 
     } 
     set 
     { 
      currentCount = value; 
     } 
    } 
    public string OnOrder 
    { 
     get 
     { 
      return onOrder; 
     } 
     set 
     { 
      onOrder = value; 
     } 
    } 
} 


{ 
class Program 
{ 
    public static List<Product> itemList = new List<Product>(); 
    /// <summary> 
    /// The main entry point for the application. 
    /// </summary> 
    [STAThread] 
    static void Main() 
    { 
     //Reads csv file 
     var filestream = new FileStream(@"c:\StockFile\stocklist.csv", FileMode.Open, 
     FileAccess.Read, FileShare.ReadWrite); 
     var file = new StreamReader(filestream, Encoding.UTF8, true, 128); 
     string lineOfText; 

     bool firstLine = true; 
     while ((lineOfText = file.ReadLine()) != null) 
     { 

      if (!firstLine) 
      { 
       // splits the values   
       string[] elements; 
       Product newItem = new Product(); 
       elements = lineOfText.Split(','); 
       newItem.itemCode = elements[0]; 
       newItem.description = elements[1]; 
       newItem.currentCount = elements[2]; 
       newItem.onOrder = elements[3]; 

       // add to list 
       itemList.Add(newItem); 
      } 
      else 
       firstLine = false; 
     } 
     //loads grid 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     Application.Run(new Form1()); 


     //Output to file 
     using (TextWriter tw = new StreamWriter(@"C:\StockFile\stocklist.csv")) 
     { 
      tw.WriteLine("Item Code,Item Description,Current Count,On Order"); 
      foreach (Product newItem in itemList) 
      { 
       tw.WriteLine(newItem.ItemCode + "," + newItem.Description + "," + newItem.CurrentCount + "," + newItem.OnOrder); 

      } 
     } 
    } 
} 


{ 
public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 
    //Binds data to Grid 
    private void Form1_Load(object sender, EventArgs e) 
    { 
     var source = new BindingSource(); 
     source.DataSource = Program.itemList; 
     dataGridView1.DataSource = source; 
     dataGridView1.AutoGenerateColumns = true; 
     this.Controls.Add(dataGridView1); 
     dataGridView1.Refresh(); 

     foreach (DataGridViewColumn column in dataGridView1.Columns) 
     { 

      dataGridView1.Columns[column.Name].SortMode = DataGridViewColumnSortMode.Automatic; 
     } 


     //Make Colomns read only 
     foreach (DataGridViewColumn col in dataGridView1.Columns) 
     { 
      if (col.Name == "CurrentCount") 
      { 
       col.ReadOnly = false; 
      } 
      else 
      { 
       col.ReadOnly = true; 
      } 
     } 
    } 

} 
+0

This Might help http://stackoverflow.com/questions/23661195/datagridview-using-sortablebind inglist – CodingDefined

+0

使用[Equin.ApplicationFramework.BindingListView](http://blw.sourceforge.net/)。它是一個穩定且完全成熟的實現,用於在DataGridView上對數據進行排序和過濾 –

回答