繁体   English   中英

如何从代码动态创建多个 gridview

[英]How to create multiple gridview dynamically from code

我想在面板中有多个网格视图。 并且gridviews的数量不固定..

所以基本上.aspx 页面中应该没有代码,因为我必须在代码隐藏中创建 gridview。

并且对于每个gridview,headerstyle.backcolor 应该不同(这是基于gridviews的数量)

请帮忙。

所以基本上.aspx 页面中应该没有代码,因为我必须在代码隐藏中创建 gridview。

说谁,为什么???

我的意思是,我可能想要显示一些数据行,可能是 1 行数据或 20 行数据。 那么逻辑是否会建议页面上不应该有任何标记,因为我不知道提前显示多少行? (当然不是 - 以这种方式思考完全是垃圾)。

所以,这样说:

我想在表单上放置一个文本框,但我不知道我是否会有 1 个或 20 个文本框 - 所以我必须在后面编写代码来注入文本框? 不,再一次完全垃圾建议甚至这样想!

如果您需要重复一些控件,请猜测您应该使用什么控件来为您执行此操作???

为什么当然是中继器!!!

想要 1 或 20 个网格视图也是如此。 使用中继器 - 该控件中的非常名称 REPEATer 应该为您提供有关该控件用途的提示和想法!

因此,显然我们要重复“N”次的“事物”必须具有某种类型的数据源。 不知道那个数据源是什么,但是对于这篇文章,让我们弥补一下。

假设有一张名为hotels 的表,对于每家酒店,我们将要显示预订的人。 因此,对于每家酒店,我们要重复网格(以显示在该酒店预订的人)。

因此,我们放入一个中继器,并在其中放入一个网格视图。 像这样说:

<asp:Repeater ID="Repeater1" runat="server">
    <ItemTemplate>

        <asp:HiddenField ID="HotelID" runat="server" Value='<%# Eval("ID") %>' />
        <div style="border:solid 2px;width:40%;padding:8px">

            <h3>Hotel Information for <%# Eval("HotelName") %> </h3>
            <h5>Booked people</h5>
            <asp:GridView ID="GridView1" runat="server" cssClass="table" width="50%" ></asp:GridView>

        </div>
    </ItemTemplate>
</asp:Repeater>

所以,很少的标记(也没有大量的代码来造成世界贫困。!!)。

所以,现在我们要在上面加载的代码

我们有这个:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    If Not IsPostBack Then
        LoadGrid()
    End If

End Sub


Sub LoadGrid()
    Dim strSQL As String

    strSQL = "SELECT * FROM tblHotels ORDER BY HotelName"

    Repeater1.DataSource = MyRst(strSQL)
    Repeater1.DataBind()

End Sub

现在,对于每个中继器“数据”事件,我们填写 GV。 可能是不同的数据源——无论你想塞进那个 GV。

而且我们想一遍又一遍地着色 - 比如 3 colors。

所以,这个简单的代码:

Protected Sub Repeater1_ItemDataBound(sender As Object, e As RepeaterItemEventArgs) Handles Repeater1.ItemDataBound

    ' for each repated item and gridview, fill out GV
    If e.Item.ItemType = ListItemType.Item Or
        e.Item.ItemType = ListItemType.AlternatingItem Then

        Dim HotelPK As Integer =
            CType(e.Item.FindControl("HotelID"), HiddenField).Value

        ' load up GV
        Dim MyGV As GridView = e.Item.FindControl("GridView1")
        Dim strSQL As String =
            "SELECT FirstName, LastName, City FROM People WHERE Hotel_ID = " & HotelPK

        MyGV.DataSource = MyRst(strSQL)
        MyGV.DataBind()

        ' now set back ground color of the gv (rotate)
        Dim sColorRotate() As String = {"aliceblue", "tan", "salmon"}
        Dim ixColor As Integer = e.Item.ItemIndex Mod 3
        MyGV.Style.Add("background-color", sColorRotate(ixColor))

    End If

End Sub

最后但同样重要的是,我们的“帮手”MyRst function。 这个:

Public Function MyRst(strSQL As String) As DataTable

    Dim rstData As New DataTable

    Using conn As New SqlConnection(My.Settings.TEST4)
        Using cmdSQL As New SqlCommand(strSQL, conn)
            conn.Open()
            rstData.Load(cmdSQL.ExecuteReader)
        End Using
    End Using
    Return rstData

End Function

output 结果现在是这样的:

在此处输入图像描述

所以,真的,事实上,你的情况非常建议一遍又一遍地重复一些 GridView,然后使用中继器为你重复。

事实上,我可以写出并获得一个 SO 帖子的工作示例,并且在更少的时间内完成,然后我花了我写出这篇文章的时间?

转发器不仅是一个好主意,而且是为此所需的最少努力和代码 - 如此之多以至于我注意到我能够在几分钟内在一个简单的问答论坛中发布一个工作代码示例时间。

如果我必须开始编写代码来注入 HTML? 我仍然会写代码,甚至还没有回答你的问题!!!

所以你不必注入和编写代码来注入 html。 我想你“可以”,但你不必,也没有上述类型的解决方案? 因此,您最好避免编写一大堆循环代码,甚至避免编写大量代码来将此类 html 注入 web 页面。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM