【问题标题】:C# - Removing duplicated items from dropdownlist in .net 4.0C# - 从 .net 4.0 的下拉列表中删除重复的项目
【发布时间】:2012-09-24 05:02:20
【问题描述】:

.net framework 4.0 遇到的问题

我目前有 2 个下拉列表,其中一个用于月份选择,另一个用于年份选择。

他们的两个数据源都是来自 SQL 的数据表,它返回以年和月为列的行。然后我使用 datatextfield 和 datavaluefield 来指定要使用的列。示例:

string sql = "select.... group by...";//the query

DataTable dtMonthYear = db.getDataTable(sql); //got the datatable

ddlMonth.DataSource = dtMonthYear;
ddlMonth.DataTextField = "Month";
ddlMonth.DataValueField = "Month";
ddlMonth.DataBind();

ddlYear.DataSource = dtMonthYear;
ddlMonth.DataTextField = "Year";
ddlMonth.DataValueField = "Year";
ddlYear.DataBind();

正因为如此,这一年会有重复的项目,我希望消除重复的项目。

我发现 linq 可以做到这一点,但不幸的是,我的框架只有 4.0,不能使用 datarowextension。这是我得到的链接:LINQ query on a DataTable

有人有其他想法吗?

谢谢

【问题讨论】:

  • 可惜我的框架到4.0为止这是什么意思?
  • 因为从示例中我发现我似乎可以使用 linq 来实现这一点,但要使用扩展将其转换回数据表,我将需要使用 DataRowExtensions 但它仅在 .净 4.5....还是我错了?
  • DataRowExtensions 在 .NET 4.5、4.0、3.5 中可用。检查此LINK 一次

标签: c# linq drop-down-menu


【解决方案1】:

您可以在 .NET 4 中使用Linq-To-DataSet(甚至在 3.5 中):

DataTable years = dtMonthYear.AsEnumerable()
                  .GroupBy(r => r.Field<int>("Year"))
                  .Select( g => g.OrderBy(r => r.Field<int>("Month")).First())
                  .CopyToDataTable();

注意需要加using System.Linq;

【讨论】:

  • 由于未知原因,我仍然无法使用 CopyToDataTable(),即使我在代码中添加了 System.Ling。我将您的答案与 Cuong Le 的答案结合起来,得到了 List 的结果......但是当我尝试运行它时,它在下拉列表数据绑定期间给了我错误,说 int 数据类型没有属性名称 Year
  • 您只能在IEnumerable&lt;DataRow&gt; 上使用CopyToDataTable(就像我的方法一样,而List&lt;int&gt; 不是)。但是你不需要DataTable作为DataSource,你也可以使用List
  • 我明白了。为什么 List 不能使用 .DataBind() 方法?我试过了,它似乎从列表中预测了一些键值对。
  • 您可以使用ddlMonth.Items.Add 或匿名类型作为支持类型:ddlMonth.DataSource = list.Select(i =&gt; mew {Key=i.ToString(),Value=i.ToString()});
  • hmm list.Select 方法给了我错误。抱歉,如果这给您带来麻烦,但我是 linq 的菜鸟 =(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-06
  • 1970-01-01
  • 2022-01-23
  • 2012-03-11
  • 1970-01-01
相关资源
最近更新 更多