扩展 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>
当您运行页面时,它将显示为图片所示