2009-03-13 10 views
1

これは、これを参照して、部分的である:ドロップダウンリストを使ってグリッドビューを新しいコントロールとして作成できますか?

Why isn't the SelectedIndexChanged event firing from a dropdownlist in a GridView?

私は別の質問をするのに十分な、それは違うと思いました。

私の考えは、グリッドビューにドロップダウンリスト(ddl)を追加する代わりに、その中にddlと参照を直接持つ新しいコントロールを作成することができます。

これは、asp.net 2.0以上のコントロールを作成する方法の詳細ですが、私が考えていることは可能ですか?あなたは常にそれにddlを持っていて、ちょうどfindcontrolとそれ以外のものを使わずに(何とか)それを参照する "new" gridviewコントロールを作成できますか?

私はそれが非常にユニークなアプリケーションのためにカスタマイズされることを実現します。私は他のコントロールを作成するためにこれを使用したい場合があるので、可能かどうかを確認しようとしています。

ありがとうございます。

答えて

2

「新しい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(); 
} 
関連する問題