如何从类创建一个GridView
问题描述:
我是新来的asp.net,最近一直在从代码隐藏创建一个GridView,使它更加灵活,以便我最终可以根据用户规范创建它。如何从类创建一个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
任何帮助,不胜感激!
答
如果我理解正确,您正在尝试使自定义Gridview类。你可以按照下面的链接寻求你的帮助。你所需要做的就是创建一个继承Gridview类的类,以便覆盖默认的功能以使其更通用。
Extending the GridView Control
这个信息应该有所帮助。谢谢。 – Cineno28 2012-02-28 18:16:21
其实我在这里还是有点困惑。我想要做的是创建一个我可以使用的外部类,以便当我想在任何页面上创建GridView时,我可以使用该类,而不是在每个页面的代码隐藏中手动创建它。我提供的代码用于从代码隐藏中创建GridView。我只是想弄清楚如何重写它,以便它可以从类创建。 – Cineno28 2012-02-28 20:14:57
对你来说很老实,我一年前在MSDN上亲自问过这个问题,MSFT家伙说这是一项非常大的工作。 Gridview的扩展并不容易。我提供的是一个好的开始,但从那里你就是我的朋友。:)祝你好运 – 2012-02-29 16:38:46