簡體   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