使用动态超链接创建数据网格视图

Posted

技术标签:

【中文标题】使用动态超链接创建数据网格视图【英文标题】:Create datagridviews with dynamic hyperlinks 【发布时间】:2021-11-20 08:10:13 【问题描述】:

我需要创建一个动态网格视图,列数是可变的。 我试图更好地解释自己..

我必须创建一个表,其中包含每家酒店的一列,并在各行中包含每月的日期以及为每家酒店预订的相关人员。 示例:

|日期| 1号酒店 | 2号酒店| |2021-09-01| 100| 90| |2021-09-02| 102| 92|

对于我在数据库中保存了他可以查看的酒店的每个用户,所以我必须创建一个包含动态创建的列的 datagridview。 我想在预订人数中显示一个超链接,这样如果您点击它,它会打开一个包含预订详细信息的页面,并传递当天和酒店的数据

由于 ID 和 DAY 列会一直存在,所以我想不是动态创建它们,而是将它们写在代码中

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
                        AllowPaging="True" Width="100%" AllowSorting="True" class="table table-hover table-striped">
                        <AlternatingRowStyle BackColor="#DFDFDF" />
                        <PagerStyle ForeColor="#3a4f63"  HorizontalAlign="Right" BackColor="#C6C3C6"></PagerStyle>                        
                        <Columns>
                            <asp:BoundField DataField="id" HeaderText="Id" InsertVisible="False" ReadOnly="True"
                                ShowHeader="False">
                                <ItemStyle Width="50px" />
                            </asp:BoundField>

                            <asp:BoundField DataField="giorno" HeaderText="Giorno" InsertVisible="False" ReadOnly="True"
                                ShowHeader="False">
                                <ItemStyle Width="50px" />
                            </asp:BoundField>
                            

                         </Columns>
</asp:GridView>

我用第一列 id 和 day 初始化我的 DataTable dt

 Dim dt As New DataTable
 dt.Columns.Add("id")
 dt.Columns.Add("day")

在查找要显示的酒店的查询中,我将超链接列添加到 datagridview

dt.Columns.Add(dr("hotel"))

Dim tfield As New HyperLinkField()
tfield.HeaderText = dr("hotel")
tfield.NavigateUrl = "info_booking.aspx?ID=0"
tfield.Text = "11" 'IF I OMIT THE LINE, I DO NOT DISPLAY ANYTHING

GridView1.Columns.Add(tfield)

现在我做一个循环,在其中填充酒店和预订的行,并将数据添加到 DataTable,如下所示

...
dt.Rows.Add("1", "01/07/2021", "100", "90")
dt.Rows.Add("2", "02/07/2021", "102", "92")
...
GridView1.DataSource = dt
GridView1.DataBind()

如果我省略该行,我会遇到以下问题

tfield.Text = "11" 'IF I OMIT THE LINE, I DO NOT DISPLAY ANYTHING

datagridview的组成如下

|日期| 1号酒店 | 2号酒店| |2021-09-01| | | |2021-09-02| | |

另一方面,如果我写下一行并分配任何值,例如 11,我在所有行上都显示 11,即

|日期| 1号酒店 | 2号酒店| |2021-09-01| 11 | 11 | |2021-09-02| 11 | 11 |

我想了解如何修改每一行和每一列的超链接中要传递的文本和参数。

我希望我已经足够清楚了。

谢谢

【问题讨论】:

***.com/help/self-answer 【参考方案1】:

解决方案:

我已将超链接更改为 bounfield,然后在事件 RowDataBound 中创建超链接。所以我删除了这段代码:

Dim tfield As New HyperLinkField()
tfield.HeaderText = dr("hotel")
tfield.NavigateUrl = "info_booking.aspx?ID=0"
tfield.Text = "11" 'IF I OMIT THE LINE, I DO NOT DISPLAY ANYTHING

并编写以下代码:

Dim bfield As BoundField = New BoundField()
 bfield.HeaderText = dr("hotel")
 bfield.DataField = "id_" & dr("hotel")
 GridView1.Columns.Add(bfield)

比我在这手上加行:

Row("id") = "2"
 Row("giorno") = "02/07/2021"
 Row("id_Hotel 1") = "102"
 Row("id_Hotel 2") = "103"

 dt.Rows.Add(Row)

我已经创建了事件数据行

Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound

        If e.Row.RowType = DataControlRowType.DataRow Then
            For i = 0 To i_rif
                Dim hp As HyperLink = New HyperLink()
                hp.Text = e.Row.Cells(i + 2).Text
                hp.Target = "_blank"
                hp.NavigateUrl = "~/Dettaglio_rifugio_giorno.aspx?data=" & e.Row.Cells(1).Text & "&amp;id_rifugio=" & arr_rif(i)
                e.Row.Cells(i + 2).Controls.Add(hp)
            Next

        End If

    End Sub

1 周后我找到了解决方案!

希望这篇文章能对某人有所帮助。

再见

【讨论】:

以上是关于使用动态超链接创建数据网格视图的主要内容,如果未能解决你的问题,请参考以下文章

如何使用动态 WHERE 子句将网格视图绑定到数据源?

Yii2过滤网格视图,带有多个$ _GET参数

具有特定列上的子列的数据网格视图

如何在 VB 中格式化动态网格视图?

在 ASP.NET MVC 中为 KendoUI 网格控件中的每一行添加一个包含超链接的列

如何在 HTML 表格中传输 asp.net 网格视图数据