扩展 GridView 控件
5.00/5 (2投票s)
扩展 ASP .NET 的 GridView 控件。如果您想修改 ASP .Net 现有 GridView 控件的一些功能,您总是可以选择
扩展 ASP .NET 的 GridView 控件
如果您想修改 ASP .Net 现有 GridView 控件的一些功能,您总是可以选择扩展该控件。 在本文中,我将通过自定义字段来扩展 GridView。
要扩展 GridView 控件,您可以从现有类或以下类之一继承:
1). DataControlField – 绑定字段的基类
2). ButtonFieldBase – 所有按钮字段和命令字段的基类。
在本文中,我将使用 LongTextField 和 ConfirmDeleteButton(将在我的下一篇博客中介绍)来扩展 ASP .Net 的 GridView 控件。
使用 LongTextField 扩展 GridView 控件
现有的 GridView 字段都不提供处理长文本(如描述字段)的功能,因此我将创建一个 LongTextField,用于显示无论文本长度如何的长文本。
在正常显示模式下,GridView 控件在滚动 <DIV> 标签中显示文本,而在编辑模式下,它将在多行文本框中显示文本。 要创建自定义字段,必须从基类 BoundField 控件继承一个新类。 以下列表包含 LongTextField 的代码。
Imports Microsoft.VisualBasic
Namespace myControls
Public Class LongTextField
Inherits BoundField
Private _Height As Unit = New Unit("60px")
Private _Width As Unit = New Unit("250px")
Public Property Height() As Unit
Get
Return _Height
End Get
Set(ByVal value As Unit)
_Height = value
End Set
End Property
Public Property Width() As Unit
Get
Return _Width
End Get
Set(ByVal value As Unit)
_Width = value
End Set
End Property
Protected Overrides Sub InitializeDataCell(ByVal cell As System.Web.UI.WebControls.DataControlFieldCell, ByVal rowState As System.Web.UI.WebControls.DataControlRowState)
' If not editing, show in scrolling div
If (rowState And DataControlRowState.Edit) = 0 Then
Dim div As New HtmlGenericControl("div")
div.Attributes("class") = "longTextField"
div.Style(HtmlTextWriterStyle.Width) = _Width.ToString()
div.Style(HtmlTextWriterStyle.Height) = _Height.ToString()
div.Style(HtmlTextWriterStyle.Overflow) = "auto"
AddHandler div.DataBinding, AddressOf div_DataBinding
cell.Controls.Add(div)
Else
Dim txtEdit As New TextBox()
txtEdit.TextMode = TextBoxMode.MultiLine
txtEdit.Width = _Width
txtEdit.Height = _Height
AddHandler txtEdit.DataBinding, AddressOf txtEdit_DataBinding
cell.Controls.Add(txtEdit)
End If
End Sub
'''
''' Called when databound in display mode
'''
Private Sub div_DataBinding(ByVal s As Object, ByVal e As EventArgs)
Dim div As HtmlGenericControl = DirectCast(s, HtmlGenericControl)
' Get the field value
Dim value As [Object] = Me.GetValue(div.NamingContainer)
' Assign the formatted value
div.InnerText = Me.FormatDataValue(value, Me.HtmlEncode)
End Sub
'''
''' Called when databound in edit mode
'''
Private Sub txtEdit_DataBinding(ByVal s As Object, ByVal e As EventArgs)
Dim txtEdit As TextBox = DirectCast(s, TextBox)
' Get the field value
Dim value As [Object] = Me.GetValue(txtEdit.NamingContainer)
' Assign the formatted value
txtEdit.Text = Me.FormatDataValue(value, Me.HtmlEncode)
End Sub
End Class
End Namespace
在此列表中,重写了 InitializeDataCell,此方法负责在正常模式和编辑模式下创建所有控件。 首先检查模式,如果模式不在编辑状态,则创建 div 标签并在 div 内渲染文本。 如果模式是编辑状态,则创建多行文本框并在多行文本框内渲染文本。
您可以使用 LongTextField,如以下列表所示。 此页面使用 LongTextField 来显示假期描述
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Temp.aspx.vb" Inherits="Temp" EnableEventValidation="false" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>
<HTML xmlns="http://www.w3.org/1999/xhtml">
<HEAD runat="server">
<FORM id=form1 runat="server">
<asp:ScriptManager id=ScriptManager1 runat="server">
</asp:ScriptManager>
<asp:GridView id=grvHoliday runat="server" DataKeyNames="Holiday_ID" AutoGenerateEditButton="True" DataSourceID="lds_Holiday" AutoGenerateColumns="False">
<ROWSTYLE BorderWidth="0px" VerticalAlign="Top" HorizontalAlign="Left">
<EDITROWSTYLE BorderWidth="0px" VerticalAlign="Top" HorizontalAlign="Left">
<COLUMNS>
<?XML:NAMESPACE PREFIX = CustomField /><CustomField:DeleteButtonField>
</CustomField:DeleteButtonField>
<asp:BoundField Visible="False" SortExpression="Holiday_ID" ReadOnly="True" HeaderText="Holiday_ID" DataField="Holiday_ID"></ASP>
<asp:TemplateField SortExpression="Title" HeaderText="Title">
<EDITITEMTEMPLATE>
<asp:TextBox id=txtTitle runat="server" Text='<%# Bind("Title") %>'></asp:TextBox>
</EDITITEMTEMPLATE>
<ITEMTEMPLATE>
<asp:Label id=lblTitle runat="server" Text='<%# Bind("Title") %>'></asp:Label>
</ITEMTEMPLATE>
</asp:TemplateField>
<CustomField:LongTextField HeaderText="Description" DataField="Description" Width="300px" Height="60px">
</CustomField:LongTextField>
<asp:TemplateField SortExpression="Date" HeaderText="Date">
<EDITITEMTEMPLATE>
<asp:TextBox id=txtDate runat="server" Text='<%# Bind("Date", "{0:d}") %>'></asp:TextBox>
<?xml:namespace prefix = cc1 /><cc1:CalendarExtender id=txtDate_CalendarExtender runat="server" TargetControlID="txtDate" Enabled="True">
</cc1:CalendarExtender>
</EDITITEMTEMPLATE>
<ITEMTEMPLATE>
<asp:Label id=lblDate runat="server" Text='<%# Bind("Date", "{0:d}") %>'></asp:Label>
</ITEMTEMPLATE>
</asp:TemplateField>
</COLUMNS>
</asp:GridView>
<asp:LinqDataSource id=lds_Holiday runat="server" EnableUpdate="True" EnableDelete="True" TableName="College_Holidays" ContextTypeName="HolidayDataContext">
</asp:LinqDataSource>
当您运行页面时,它将显示为图片所示
