「新しいGridView」の定義によって異なります。答えはまだですが、コストがかかります。
コントロールをWebControlに基づいている場合は、任意の機能を持つ新しいグリッドコントロールを作成できます。どういうわけか、私はこれがあなたが念頭に置いているものだとは思わない。
既存のGridViewから継承し、余分なコントロールを追加する場合は、実行可能ですが重い制限があります。その理由は、GridViewのインプリメンテーションは、拡張性のためのすべての可能なガイドラインを破っているからです。彼らはそれが拡張されることを決して意味しなかったので、私は推測する。例えば、ほとんどすべての場面でControlsコレクションをクリアし、Controls [0]がテーブルであることを明示的に期待します。あなたがテーブルレイアウト(ヘッダー、フッター、そしてすべて)の境界内にとどまることに決めたら、もっと遊ぶ余地があるかもしれないと思います。
最後に、プライベートメンバーとしてGridViewがあり、必要以上に必要なものすべてを公開するラッパーを作成できます。しかし、それは非常に迅速に醜い取得します。
ここでは、2番目のアプローチの粗いデモンストレーション(作業)です。ドロップダウンは最後にあることに注意してください。 Renderメソッドをオーバーライドできますが、多くのMSコードを再作成する必要があります。
ExtendedGridView
public class ExtendedGridView : GridView
{
protected DropDownList DropDown { get; set; }
public ExtendedGridView() : base()
{
this.DropDown = new DropDownList();
this.DropDown.Items.Add("white");
this.DropDown.Items.Add("red");
this.DropDown.Items.Add("blue");
this.DropDown.Items.Add("green");
this.DropDown.AutoPostBack = true;
this.DropDown.ID = "dropdown";
this.DropDown.SelectedIndexChanged += new EventHandler(DropDown_SelectedIndexChanged);
}
void DropDown_SelectedIndexChanged(object sender, EventArgs e)
{
BackColor = System.Drawing.Color.FromName(this.DropDown.SelectedValue);
}
protected override int CreateChildControls(System.Collections.IEnumerable dataSource, bool dataBinding)
{
int itemCount = base.CreateChildControls(dataSource, dataBinding);
Controls.Add(this.DropDown);
return itemCount;
}
}
SomePage.aspx
<%@ Register TagPrefix="my" Namespace="MyProject" Assembly="MyProject" %>
<my:ExtendedGridView id="myGridView" runat="server" onpageindexchanging="myGridView_PageIndexChanging"></my:ExtendedGridView>
SomePage.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
myGridView.DataSource = new string[] { "aaa", "bbb", "ccc", "ddd", "eee" };
myGridView.AllowPaging = true;
myGridView.PageSize = 2;
myGridView.DataBind();
}
protected void myGridView_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
myGridView.PageIndex = e.NewPageIndex;
myGridView.DataBind();
}