0

我正在从表中获取数据并绑定到标签并在网格视图中下拉,但我想过滤表中的重复名称并将相应的日期分配给 DDL 怎么做?或者还有其他选择吗?

 private DataSet get()
    {
        string sql = "select Id,Name,RunDate from Historytable";
        SqlDataAdapter da=new SqlDataAdapter(sql,con);
        DataSet ds=new DataSet();
        da.Fill(ds);
        return ds;
    }

在此处输入图像描述

 protected void GridView1_RowDataBound1(object sender, GridViewRowEventArgs e)
    { 

        //what to code here?


        }
4

3 回答 3

3

如果您只想从 HistoryTable 中获取唯一名称,则应使用关键字 DISTINCT

string sql = "select DISTINCT Name from Historytable";

但是,看到您的更新,我认为您应该将查询更改为类似于@dasblinkenlight 的建议答案,如果您想要每个名称的第一个日期

string sql = "select Min(ID), Name, Min(RunDate) from Historytable group by Name";

或(如果您想要每个名称的最后日期)

string sql = "select Max(ID), Name, Max(RunDate) from Historytable group by Name";
于 2012-10-26T16:05:41.410 回答
1

删除重复项的快速而肮脏的方法如下:

string sql = "select min(Id),Name,min(RunDate) from Historytable group by Name";

Name这将消除存在具有数字较小 ID的重复项的所有行。

于 2012-10-26T16:04:41.910 回答
0

如果您不需要任何 ID,您可以在其选定事件中将 gridview 的 objectdatasource 设置为字典,使用一点 LINQ 进行分组:

Gridview1_ObjectDataSource_Selected(object sender, ObjectDataSourceStatusEventArgs e) {
   DataSet ds = get();

   Dictionary<string, List<DateTime>> dict = new Dictionary<string, List<DateTime>>(); 

   var rows = ds.Tables[0].AsEnumerable()
                          .Select(row => new { name = row.Field<string>("name"), RunDate = row.Field<DateTime>("RunDate") })
                          .GroupBy(r => r.name)
   foreach (var group in rows) {
      dict.Add(group.Key, group.ToList());
   }
   e.ReturnValue = dict;
}
于 2012-10-26T17:40:40.883 回答