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 が不要な場合は、選択したイベントでグリッドビューの 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 に答える