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;
}
}
}
}
This Might help http://stackoverflow.com/questions/23661195/datagridview-using-sortablebind inglist – CodingDefined
使用[Equin.ApplicationFramework.BindingListView](http://blw.sourceforge.net/)。它是一個穩定且完全成熟的實現,用於在DataGridView上對數據進行排序和過濾 –