【问题标题】:HOW TO create new gridview column type如何创建新的 gridview 列类型
【发布时间】:2013-01-24 06:28:16
【问题描述】:

我正在为我的 ASP.NET APP 创建一个自定义 gridview 控件,并且我希望它创建一个新的自定义列类型以执行以下操作:

(这是现在创建列的样子)

<asp:TemplateField>
<HeaderTemplate>
    <asp:LinkButton Text="R. Name" ToolTip="Resource Name" CommandName="Sort" CommandArgument="ResourceName"
        runat="server" />
    <uc:GridViewFilter ID="ucGridViewFilterResourceName" ColumnName="ResourceName" AssociatedControlType="TextBoxString"
        OnFilterApplied="ucGridViewFilter_FilterApplied" runat="server" />
</HeaderTemplate>
<ItemTemplate>
    <%# Eval("ResourceName") %>
</ItemTemplate>

我想要这样的东西:

<asp:GridViewExColumn HeaderTitle="R. Name" HeaderToolTip="Resource Name" ColumnName="ResourceName" SearchType="TextBoxString" OnFilterApplied="ucGridViewFilter_FilterApplied" Text='<%# Eval("ResourceName") %>' />

任何人都可以在隧道尽头显示一些光吗?我完全迷失了,我可以成功地创建我的自定义网格视图,但不知道从哪里开始使用这种自定义列类型。谢谢

【问题讨论】:

    标签: c# asp.net .net custom-controls


    【解决方案1】:

    我终于找到了做我正在寻找的事情的方法,我会为你提供我的发现,也许你甚至可以做得更好。

    我创建了一个新的 .cs 来扩展控件 DataControlField,如下所示:

    using System;
    using System.Collections.Generic;
    using System.Drawing;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using VMPortal.Tools;
    
    public class GridViewExColumn : DataControlField
    {
        public string HeaderToolTip { get; set; }
        public string GridViewID { get; set; }
        public string SearchType { get; set; }
        public string DataField
        {
            get
            {
                object value = ViewState["DataField"];
    
                if (value != null)
                    return value.ToString();
    
                return string.Empty;
            }
    
            set
            {
                ViewState["DataField"] = value;
                OnFieldChanged();
            }
        }
    
        protected override DataControlField CreateField()
        {
            return new BoundField();
        }
    
        public override void InitializeCell(DataControlFieldCell cell, DataControlCellType cellType, DataControlRowState rowState, int rowIndex)
        {
            base.InitializeCell(cell, cellType, rowState, rowIndex);
    
            if (cellType == DataControlCellType.Header)
            {
                var lb = new LinkButton
                {
                    Text = HeaderText,
                    ToolTip = String.IsNullOrWhiteSpace(HeaderToolTip) ? HeaderText : HeaderToolTip,
                    CommandName = "Sort",
                    CommandArgument = DataField
                };
    
                var tt = cell.Controls;
                cell.Controls.Add(lb);
    
                if (!String.IsNullOrWhiteSpace(SearchType))
                {
                    // Add filter control
                    var ctrlFilter = Control.Page.LoadControl("~/Controls/GridViewFilter.ascx") as GridViewFilter;
                    cell.Controls.Add(ctrlFilter);
                    ctrlFilter.ID = GridViewID + DataField;
                    ctrlFilter.ColumnName = DataField;
                    ctrlFilter.AssociatedControlType = SearchType;
                    ctrlFilter.FilterApplied += ctrlFilter_FilterApplied;
                }
            }
            else if (cellType == DataControlCellType.DataCell)
                cell.DataBinding += new EventHandler(cell_DataBinding);
        }
    
        protected void cell_DataBinding(object sender, EventArgs e)
        {
            var cell = (TableCell)sender;
            var dataItem = DataBinder.GetDataItem(cell.NamingContainer);
            var dataValue = DataBinder.GetPropertyValue(dataItem, DataField);
            string value = dataValue != null ? dataValue.ToString() : "";
            cell.Text = value;
        }
    
        protected void ctrlFilter_FilterApplied(object sender, EventArgs e)
        {
            var filterExpression = sender as FilterExpression;
            if (filterExpression != null)
            {
                if (FilterApplied != null)
                    FilterApplied(null, EventArgs.Empty);
            }
        }
    

    现在我可以添加一个新列,如下所示

        <uc:GridViewExColumn HeaderText="R. Name" HeaderToolTip="Resource Name" DataField="ResourceName" SearchType="TextBoxString" GridViewID="ucGridViewEx" OnFilterApplied="ucGridViewFilter_FilterApplied" />
    

    希望对其他人有所帮助。

    【讨论】:

      猜你喜欢
      • 2011-02-13
      • 2021-11-13
      • 2021-03-22
      • 2021-11-04
      • 2011-01-29
      • 1970-01-01
      • 2013-12-01
      • 1970-01-01
      相关资源
      最近更新 更多