Как создать GridView из класса - PullRequest
1 голос
/ 28 февраля 2012

Я новичок в asp.net и недавно работал над созданием GridView из codebehind, чтобы сделать его более гибким, чтобы я мог в конечном итоге создать его на основе пользовательских спецификаций.

Сейчас я изучаю классы, и я подумал, что было бы здорово создать класс GridView, чтобы всякий раз, когда мне нужно было создать GridView, я мог просто передать свой класс своим спецификациям вместо того, чтобы один и тот же код переписывался на каждом код страницы позади.

Хотя я не вижу много примеров того, как этого добиться. Кто-нибудь из вас сделал это? Имеет ли это смысл для меня?

Вот как я сейчас делаю свой GridView с codebehind. Любая идея, как я могу изменить это, чтобы создать GridView с классом?

.aspx page:

<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 голосов
/ 28 февраля 2012

Если я правильно понимаю, вы пытаетесь создать класс Custom Gridview.Вы можете перейти по ссылкам ниже для вашей помощи.Все, что вам нужно сделать, это создать класс, который наследует класс Gridview, так что вы переопределяете функциональность по умолчанию, чтобы сделать его более универсальным.

Расширение элемента управления GridView

Настраиваемый Gridview с подкачкой и фильтрацией

Создание настраиваемого элемента управления Gridview

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...