使用动态超链接创建数据网格视图
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 & "&id_rifugio=" & arr_rif(i)
e.Row.Cells(i + 2).Controls.Add(hp)
Next
End If
End Sub
1 周后我找到了解决方案!
希望这篇文章能对某人有所帮助。
再见
【讨论】:
以上是关于使用动态超链接创建数据网格视图的主要内容,如果未能解决你的问题,请参考以下文章