C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

ツリー一括表示

GridViewの項目名のハイパーリンクについて /ピカチュウ (19/11/24(Sun) 15:45) #93150
Re[1]: GridViewの項目名のハイパーリンクについて /WebSurfer (19/11/24(Sun) 15:59) #93151
Re[1]: GridViewの項目名のハイパーリンクについて /WebSurfer (19/11/27(Wed) 21:01) #93200


親記事 / ▼[ 93151 ] ▼[ 93200 ]
■93150 / 親階層)  GridViewの項目名のハイパーリンクについて
□投稿者/ ピカチュウ (1回)-(2019/11/24(Sun) 15:45:33)

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

[ □ Tree ] 返信 編集キー/

▲[ 93150 ] / 返信無し
■93151 / 1階層)  Re[1]: GridViewの項目名のハイパーリンクについて
□投稿者/ WebSurfer (1975回)-(2019/11/24(Sun) 15:59:33)
No93150 (ピカチュウ さん) に返信

思い付きで深く考えていませんが・・・

GridView.RowCreated とか GridView.RowDataBound イベントのハンドラで
無理やり細工すると言った方法で何とかなるかもしれません。

そのあたりは考えてみましたか?
[ 親 93150 / □ Tree ] 返信 編集キー/

▲[ 93150 ] / 返信無し
■93200 / 1階層)  Re[1]: GridViewの項目名のハイパーリンクについて
□投稿者/ WebSurfer (1980回)-(2019/11/27(Wed) 21:01:50)
No93150 (ピカチュウ さん) に返信

去ってしまったのかな?
[ 親 93150 / □ Tree ] 返信 編集キー/


管理者用

- Child Tree -