2011-10-19 14 views
0

私は以下のようにドロップダウンリストコントロールを作成するカスタムクラスを持っている:asp.net WebBrowserコントロールイベントの順序とViewStateの

public class IHGridView : System.Web.UI.WebControls.WebControl 
{ 
    private string _dataSource = "not set yet"; 

    public string DataSource 
    { 
     get { return _dataSource; } 
     set { _dataSource = value; } 
    } 
} 

EDIT:

protected override void OnInit(EventArgs e) 
    { 
     // VIewState is alive. When I select an option and submit, after postback it's selected value is the one I selected. 
     this.Controls.Add(_dropDownList); 
    } 

または

protected override void CreateChildControls() 
    { 
     // VIewState is dead. When I select an option and submit, after postback it's selected value is the default one. 
     this.Controls.Add(_dropDownList); 
    } 

だから、今私は "OnInit" voidでコントロールを追加する必要があるという結果を思いつきます。 しかし、この "OnInit"は、このクラスが書き込む最初の無効です。 前に "DataSource"のようなプロパティを使用したい場合は、 "OnInit" void ... どうすればいいですか?

EDIT:

protected void Button1_Click(object sender, EventArgs e) 
    { 
     IHGridViewTest2.DataSource = "fired"; 
    } 

aspxページ内のボタンが発射されたときにデータソースが設定されています。

+0

DataSourceが設定されていますか? – millimoose

+0

ボタンが押されたとき。私は質問を編集しました。 –

答えて

0

なぜ_dropDownListを2回追加したいですか?一度OnInitで十分でなければならず、OnInitはコントロールコレクション内に追加する必要がある場合に追加する必要があります。したがって、viewstateを永続化して復元する必要があります。

たとえば、_dropDownListにアクセスしてバインドするには、DataBindメソッドをオーバーライドします。その時点で、すべてのプロパティが利用可能になります。

protected override void DataBind(){ 
    base.DataBind(); 
    _dropDownList.DataSource = this.DataSource; 
    _dropDownList.DataBind(); 
} 

が、これは擬似コードで、テストまたはEDIT

検証されていない。

コールのDataBindオーバーライドメソッドは

protected void Button1_Click(object sender, EventArgs e) 
{ 
    IHGridViewTest2.DataSource = "fired"; 
    IHGridViewTest2.DataBind(); 
} 
+0

ソースコードに「OR」があります。たぶんあなたは私の質問を注意深く読んでいないかもしれません。とにかく、あなたの答えをありがとう。 –

+0

質問は編集されましたが、私の答えはまだ適用され、OnInitに追加されているコントロールを維持して、上のようにDataBindメソッドをオーバーライドして、ボタンハンドラのコードを変更してください: –

+0

私は答えを更新しました –