|
分類:[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>
----------------------------------------------------------------------
|