2012-02-28 9 views
1

私は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 

すべてのヘルプは大歓迎です!

答えて

0

正しく理解していれば、カスタムのGridviewクラスを作成しようとしています。あなたはあなたの助けのために以下のリンクに従うことができます。 Gridviewクラスを継承するクラスを作成するだけで、デフォルト機能をオーバーライドしてより一般的なものにすることができます。

Extending the GridView Control

Custom Gridview with paging and filtering

Creating Custom Gridview Control

+0

この情報は役立つはずです。ありがとうございました。 – Cineno28

+0

実際に私はまだここで少し混乱しています。私は、外部のクラスを作成して、どのページにもGridViewを作成したいときに、各ページのコードビハインドに手動で作成するのではなく、そのクラスを使用できるようにします。私が提供したコードは、コードビハインドからGridViewを作成するためのものです。私はそれをクラスから作成できるように書き直す方法を考えようとしています。 – Cineno28

+0

あなたには正直言って、私は個人的にMSDNの1年前にこの質問をしてきましたが、MSFTの人は非常に大きな仕事だと言っていました。 Gridviewの拡張は容易ではありません。私が提供したものは良いスタートですが、そこからあなただけで私の友人です。:)幸運 –

関連する問題