我有 2 个解决方案给你 1 个正在使用 DataTable。
void loadGrid()
{
DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[2] {
new DataColumn("Acc_Name", typeof(string)),
new DataColumn("Opening_bal",typeof(decimal)) });
dt.Rows.Add("Alpasce", "20");
dt.Rows.Add("Cvcpas", "1000");
dt.Rows.Add("Jpasmal", "500");
dataGridView1.DataSource = dt;
}
void searchAndOrderGrid()
{
DataTable table = this.dataGridView1.DataSource as DataTable;
var results = (from myRow in table.AsEnumerable()
where myRow.Field<string>("Acc_Name").Contains("as")
orderby myRow.Field<string>("Acc_Name").IndexOf("s")
select myRow).ToList();
DataTable dtNew = new DataTable();
dtNew.Columns.AddRange(new DataColumn[2] {
new DataColumn("Acc_Name", typeof(string)),
new DataColumn("Opening_bal",typeof(decimal)) });
if (results != null)
{
foreach (var row in results)
{
dtNew.Rows.Add(row.Field<string>("Acc_Name"), row.Field<decimal>("Opening_bal"));
}
dataGridView1.DataSource = dtNew;
}
}
注意:这不是优化的。您可以对其进行优化,也可以更有效地进行。
第二个解决方案是使用类对象
public class Acc_Sub_SubHead
{
public string Acc_Name { get; set; }
public decimal Opening_bal { get; set; }
}
void loadData()
{
List<Acc_Sub_SubHead> Items = new List<Acc_Sub_SubHead>();
Items.Add(new Acc_Sub_SubHead() { Acc_Name = "Alpasce", Opening_bal = 202 });
Items.Add(new Acc_Sub_SubHead() { Acc_Name = "Cvcpas", Opening_bal = 365 });
Items.Add(new Acc_Sub_SubHead() { Acc_Name = "Jpasmal", Opening_bal = 125 });
this.dataGridView1.DataSource = Items;
}
void searchAndOrderby()
{
List<Acc_Sub_SubHead> tempItems = this.dataGridView1.DataSource as List<Acc_Sub_SubHead>;
var orderedData = tempItems.Where(c => c.Acc_Name.Contains("as")).OrderBy(x => x.Acc_Name.IndexOf("s")).ToList();
this.dataGridView1.DataSource = orderedData;
}
注意:我喜欢第二种方式。它比第一个更有效和更快。我已经测试了这两个代码并且它有效。请检查并告诉我。