【问题标题】:Like and Sorting Operation in Grid view网格视图中的点赞和排序操作
【发布时间】:2021-01-17 06:44:19
【问题描述】:

我想使用 like 运算符对网格视图数据进行排序,就像 SQL Query 一样

SELECT     Acc_Name, Opening_bal
FROM         Acc_Sub_SubHead
WHERE     (Acc_Name LIKE N'%sa%')
ORDER BY CHARINDEX('s', Acc_Name)

我试过这种方法

DataTable table = this.GVProductList.DataSource as DataTable;
table.DefaultView.RowFilter = "Name LIKE '%" + txtSearch.Text + "%' ";

【问题讨论】:

  • 您在查询中尝试过ASCDESC 吗?
  • @Andrei 不,还没有。
  • 1. DataGridView的DataSource是怎么设置的? 2. 您想要排序和过滤的列名和类型是什么? 3. 您看到的错误消息或意外行为是什么?

标签: c# winforms gridview


【解决方案1】:

我有 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;
        
 }

注意:我喜欢第二种方式。它比第一个更有效和更快。我已经测试了这两个代码并且它有效。请检查并告诉我。

【讨论】:

  • 否决dataGridView1.Refresh(); 在这种情况下您不需要调用此方法。请阅读文档。
  • 只是为了展示。我使用此代码时 UI 没有更新。你检查我的代码了吗?如果你不检查代码,那你为什么给我不必要的投票。
  • 修复代码,我将删除downvote
猜你喜欢
  • 1970-01-01
  • 2011-08-22
  • 2013-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-21
相关资源
最近更新 更多