如何从类创建GridView

时间:2012-02-28 14:41:04

标签: asp.net vb.net gridview

我是asp.net的新手,最近一直致力于从代码隐藏创建一个GridView,使其更加灵活,以便最终根据用户规范创建它。

现在我正在探索类,我认为创建一个GridView类会很酷,这样每当我需要创建一个GridView时,我只需要传递我的规范,而不是在每个类上重写相同的代码。页面的代码隐藏。

我并没有真正看到太多如何实现这一目标的例子。有没有人这样做过?这样做对我来说甚至有意义吗?

以下是我目前正在使用代码隐藏创建GridView的方法。知道如何更改这个以创建带有类的GridView吗?

.aspx页面:

<asp:GridView  ID="GridView1"  runat="server"  AllowSorting="True"  AutoGenerateColumns="False" 
 EmptyDataText="There are no data records to display." AllowPaging="True" 
 CssClass="GridViewStyle" GridLines="None" Width="100%">
    <Columns>                       
        <asp:HyperLinkField DataNavigateUrlFields="EmployeeID"
            DataNavigateUrlFormatString="EmployeeProfile.aspx?EmployeeID={0}"
            DataTextField="EmployeeID"
            DataTextFormatString= "<img src='Images/icons/document-search-result.png' alt='View'/> <u>View</u>" >
            <ControlStyle CssClass="titleLinksB" />
            <ItemStyle Wrap="False" />
        </asp:HyperLinkField>                          
    </Columns>
    <RowStyle CssClass="RowStyle" />
    <EmptyDataRowStyle CssClass="EmptyRowStyle" />
    <PagerSettings Mode="NumericFirstLast" PageButtonCount="5" />
    <PagerStyle CssClass="PagerStyle" />
    <SelectedRowStyle CssClass="SelectedRowStyle" />
    <HeaderStyle CssClass="HeaderStyle" />
    <EditRowStyle CssClass="EditRowStyle" />
    <AlternatingRowStyle CssClass="AltRowStyle" />
    <SortedAscendingHeaderStyle CssClass="sortasc"></SortedAscendingHeaderStyle>
    <SortedDescendingHeaderStyle CssClass="sortdesc"></SortedDescendingHeaderStyle>        
</asp:GridView>

.aspx.vb代码隐藏页面:

Partial Class GridTest2
Inherits System.Web.UI.Page

Sub Page_load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
    If Not Page.IsPostBack Then
        CreateGridColumns()
        BindGrid()
    End If
End Sub

Public Property SortExpression As String
    Get
        If ViewState("SortExpression") Is Nothing Then
            ViewState("SortExpression") = "LastName ASC"
        End If
        Return ViewState("SortExpression").ToString
    End Get
    Set(ByVal value As String)
        ViewState("SortExpression") = value
    End Set
End Property

Private Sub CreateGridColumns()
    Dim curLastName As New BoundField
    curLastName.HeaderText = "Last Name"
    curLastName.DataField = "LastName"
    curLastName.SortExpression = "LastName"

    GridView1.Columns.Insert(0, curLastName)


    Dim curFirstName As New BoundField
    curFirstName.HeaderText = "First Name"
    curFirstName.DataField = "FirstName"
    curFirstName.SortExpression = "FirstName"

    GridView1.Columns.Insert(1, curFirstName)

End Sub

Private Sub BindGrid()
    Try
        Dim tblData = New DataTable
        Using sqlCon As New SqlClient.SqlConnection(ConfigurationManager.ConnectionStrings("dbConnectionString").ConnectionString.ToString())
            Dim sql As String = "SELECT * FROM Employees"
            Dim sqlCmd = New SqlClient.SqlCommand()
            sqlCmd.CommandText = String.Format(sql, Me.SortExpression)
            sqlCmd.Connection = sqlCon
            Using objAdapter As New SqlClient.SqlDataAdapter(sqlCmd)
                objAdapter.Fill(tblData)
            End Using
        End Using
        GridView1.DataSource = tblData
        GridView1.DataBind()
        GridView1.HeaderRow.CssClass = "HeaderStyle"

    Catch ex As Exception
        ' TODO: log error '
        Throw
    End Try
End Sub
Private Sub GridView1_PageIndexChanging(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewPageEventArgs) Handles GridView1.PageIndexChanging
    Me.GridView1.PageIndex = e.NewPageIndex
    BindGrid()
End Sub
Protected Sub GridView1_RowDataBound1(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound
    'Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs)
    Dim gridView As GridView = DirectCast(sender, GridView)
    Dim sortColumn As String, sortDirection As String
    sortColumn = Me.SortExpression.Split(" "c)(0)
    sortDirection = Me.SortExpression.Split(" "c)(1)

    If e.Row.RowType = DataControlRowType.Header Then
        Dim cellIndex As Integer = -1
        For Each field As DataControlField In gridView.Columns
            If field.SortExpression = sortColumn Then
                cellIndex = gridView.Columns.IndexOf(field)
            End If
        Next

        If cellIndex > -1 Then
            '  this is a header row, set the sort style
            e.Row.Cells(cellIndex).CssClass = If(sortDirection = "ASC", "sortasc", "sortdesc")
        End If
    End If

End Sub




Private Sub GridView1_Sorting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewSortEventArgs) Handles GridView1.Sorting
    Dim currentSortColumn, currentSortDirection As String
    currentSortColumn = Me.SortExpression.Split(" "c)(0)
    currentSortDirection = Me.SortExpression.Split(" "c)(1)
    If e.SortExpression.Equals(currentSortColumn) Then
        ' switch sort direction '
        Select Case currentSortDirection.ToUpper
            Case "ASC"
                Me.SortExpression = currentSortColumn & " DESC"
            Case "DESC"
                Me.SortExpression = currentSortColumn & " ASC"
        End Select
    Else
        Me.SortExpression = e.SortExpression & " ASC"
    End If
    BindGrid()

End Sub


End Class

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您正在尝试制作Custom Gridview类。您可以按照以下链接获取帮助。您需要做的就是创建一个继承Gridview类的类,以便覆盖默认功能以使其更通用。

Extending the GridView Control

Custom Gridview with paging and filtering

Creating Custom Gridview Control

相关问题