2012-02-28 2 views
1

Я новичок в asp.net и недавно работал над созданием GridView от codebehind, чтобы сделать его более гибким, чтобы в конечном итоге создать его на основе пользовательских спецификаций.Как создать 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 

Любая помощь очень ценится!

ответ

0

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

Extending the GridView Control

Custom Gridview with paging and filtering

Creating Custom Gridview Control

+0

Эта информация должна помочь. Спасибо. – Cineno28

+0

На самом деле я все еще немного смущен. То, что я хотел бы сделать, это создать внешний класс, который я могу использовать, чтобы, когда я хочу создать GridView на любой странице, я могу использовать этот класс вместо того, чтобы вручную создавать его в кодовом коде каждой страницы. Код, который я предоставил, работает, чтобы сделать GridView от кода. Я просто пытаюсь понять, как переписать его, чтобы он мог быть создан из класса. – Cineno28

+0

Чтобы быть честным с тобой, я лично задал этот вопрос на MSDN год назад, и парень из MSFT сказал, что это очень большая работа. Расширение Gridview непросто. то, что я предусмотрел, - хорошее начало, но оттуда вы один мой друг. :) Удачи –

Смежные вопросы