| 分類:[ASP.NET (C#)]
windows10 VS2019
datatableで時間軸の項目名だけと3行目以降のモデル名をハイパーリンクを作ろうと思いましたが、なかなか実現出来ませんでした。 調べてみたらGridView作製は実現不可能ではないかと思いますが、実現可能でしょうか? また、ほかのやり方はありますでしょうか?
---------------------------------------| | |時間軸1|時間軸2|時間軸3 | ←ハイパーリンクにしたい |-------------------------------------| |判断NG数 |数字値|数字値 |数字値 | 1行 |-------------------------------------| |判断OK数 |数字値|数字値 |数字値 | 2行 ---------------------------------------| |モデル名 |数字値|数字値 |数字値 | 3行 ---------------------------------------| ↑3行目以降ハイパーリンク
XXX.aspx.cs ----------------------------------------------------------------------
DataTable taskTable = new DataTable();
//時間軸のリスト(列名) var dateTimeAxis30List = makeTimeList(userFromTime, userToTime);
//固定列名 taskTable.Columns.Add(new DataColumn("項目", typeof(string))); //動的列名 dateTimeAxis30List.ForEach(datetime => taskTable.Columns.Add(new DataColumn(String.Format("{0:MM/dd\rHH:mm}", datetime), typeof(int)))); //1行目(判断NG数) DataRow JudgeNG_DR = taskTable.NewRow(); JudgeNG_DR["項目"] = 数字値; taskTable.Rows.Add(JudgeNG_DR);
//2行目(判断OK数) DataRow JudgeOK_DR = taskTable.NewRow(); JudgeOK_DR["項目"] = 数字値; taskTable.Rows.Add(JudgeOK_DR);
//3行目以降(モデル名) foreach (var モデル名 in モデル名List) { DataRow モデルDR = taskTable.NewRow();
//列名 foreach (var dateTimeAxis30 in dateTimeAxis30List) { モデルDR[String.Format("{0:MM/dd\rHH:mm}", dateTimeAxis30)] = 数字値; }
taskTable.Rows.Add(モデルDR); }
GridView.DataSource = taskTable; GridView.DataBind(); //ハイパーリンク //項目行=3行目から for (int rowIndex = 2; rowIndex < taskTable.Rows.Count; rowIndex++) { HyperLink 項目行Link = new HyperLink(); 項目行Link.Text = taskTable.Rows[rowIndex].Field<string>("項目"); 項目行Link.NavigateUrl = string.Format("xxx.aspx?項目名={0}&FromDateTime={1}&ToDateTime={2}" , 項目名, userFromDateTime, userToDateTime); GridView.Rows[rowIndex].Cells[taskTable.Columns.IndexOf("項目")].Controls.Add(項目行Link); }
//時間軸列=1列から for (int columnIndex = 0; columnIndex < taskTable.Columns.Count; columnIndex++) {
HyperLink dateTimeLink = new HyperLink(); dateTimeLink.Text = taskTable.Columns[columnIndex].ColumnName; dateTimeLink.NavigateUrl = string.Format("xxx.aspx?項目名={0}&FromDateTime={1}&ToDateTime={2}" , 項目名, userFromDateTime, userToDateTime); GridView.Rows[0].Cells[columnIndex].Controls.Add(dateTimeLink);
userFromDateTime = userFromDateTime.AddMinutes(30); userToDateTime = userToDateTime.AddMinutes(30); }
/// <summary> /// 30分間隔の時間軸リストを作成 /// </summary> /// <param name="fromDate">開始時間</param> /// <param name="toDate">終了時間</param> /// <returns>リストをSETする配列</returns> public static List<DateTime> makeTimeList(DateTime fromDate, DateTime toDate) { List<DateTime> list = new List<DateTime>();
while (fromDate <= toDate) {
list.Add(fromDate); fromDate = fromDate.AddMinutes(30);
}
return list;
} ----------------------------------------------------------------------
xxx.aspx ---------------------------------------------------------------------- <asp:Content ID="Content1" runat="server" ContentPlaceHolderID="content"> <asp:GridView ID="GridView" runat="server"> <Columns> <asp:TemplateField HeaderText=""> <ItemTemplate> <asp:Label runat="server" Text='<%# Eval("項目") %>'></asp:Label> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> </asp:Content> ---------------------------------------------------------------------- |