65.9K
CodeProject 正在变化。 阅读更多。
Home

扩展 GridView 控件

starIconstarIconstarIconstarIconstarIcon

5.00/5 (2投票s)

2009年6月26日

CPOL

1分钟阅读

viewsIcon

10034

扩展 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>

当您运行页面时,它将显示为图片所示

© . All rights reserved.