【问题标题】:C# - datagridview doesn't show query resultC# - datagridview 不显示查询结果
【发布时间】:2018-01-13 17:26:44
【问题描述】:

我需要帮助解决令我困惑的代码:我是 C# 初学者,我正在研究一些要点并需要帮助。在项目中,我有一个简单的表单和 SQL Server 中链接表的数据源。在这种形式中,我有一个网格和三个文本框:网格和两个文本框绑定到同一个数据源;另一个文本框是输入搜索

我的目标是让用户在文本框中键入搜索并通过 LINQ 在 bindingsource 中进行过滤。按照代码:

private void Search()
{
    if (string.IsNullOrEmpty(toolStripTextBox1.Text))
    {
        var query = from v in coletasDataSet.UF
            select v;
        this.ufBindingSource.DataSource = query.ToList();
    }
    else
    {
        string pesquisa = toolStripTextBox1.Text.ToLower().Trim();
        var query = from v in coletasDataSet.UF
            where v.UF.ToLower().Contains(pesquisa) 
            select v;
        this.ufBindingSource.DataSource = query.ToList();  
    }
}

问题是当我搜索网格时,它没有显示任何数据。它包含 2 列(UF 和 ID_UF)和一个空行。我已经调试并检查了查询结果,它是正确的。

关于可能是什么问题的任何建议?详细信息:我无法将 query.ToList () 传递给网格,因为它的绑定文本框会显示一组数据,而网格会显示另一组数据。

【问题讨论】:

  • 你可以尝试调用resetBinding方法刷新网格:ufBindingSource.ResetBindings(false);

标签: c# linq datagridview


【解决方案1】:

使用BindingList

绑定列表提供了一个支持数据绑定的通用集合。

尝试关注

     var lstResult = from v in coletasDataSet.UF
                 where v.UF.ToLower().Contains(pesquisa) 
                 select new UF()
                 {
                    Id = u.pk,
                    Username = u.Username
                    ..........                    
               }).ToList();

     var resultSet = new BindingList<UF>(lstResult); // <-- BindingList

     //Bind BindingList directly to the DataGrid, no need of BindingSource
     myGrid.DataSource = resultSet; 

【讨论】:

  • 我更改了我的代码: var query = (from v in coletasDataSet.UF where v.UF.ToLower().Contains(pesquisa) select new UF() { ID_UF = v.ID_UF, UF = v.UF }).ToList(); var 结果 = 新的 BindingList(查询); this.ufBindingSource.DataSource = 结果;现在,我在 UF 上遇到错误。有什么建议吗?
  • "找不到类型或命名空间 'UF'。"
  • Uf 只是 y answer 中的一个例子,这将是你的模型(DTO)
猜你喜欢
  • 1970-01-01
  • 2018-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-24
  • 2014-09-04
相关资源
最近更新 更多