2009-07-08 20 views
0

DropDownListコントロールを拡張して、追加のプロパティを1つ追加するだけです。asp.net DropDownListに追加のプロパティを追加する

コードそれは、他のソースからのカット/ペーストの多くが含まれていますが

Public Class CustomDropDownList 
    Inherits DropDownList 

    Private key As Int32 

    Public Property PrimaryKey() As Int32 
     Get 
      Return key 
     End Get 
     Set(ByVal value As Int32) 
      key = value 
     End Set 
    End Property 

End Class 

を次のように、私は、ローカル変数、およびプロパティのget/Setステートメントを追加しましたかなり単純なようです。

何か問題がありますか?私はこの前にセットを実行したとしても、0を返すことに問題があります。

乾杯! :D

EDIT:明確にするために

、私は私のcustomDropDownListでリピータを使用していて、そのItemDataboundイベントで、私は

If e.Item.ItemType = ListItemType.Item OrElse e.Item.ItemType = ListItemType.AlternatingItem Then 
     Dim row As DataRowView = e.Item.DataItem 
     Dim cdlConst As CustomDropDownList = e.Item.FindControl("cdlConstituencies") 
     cdlConst.SelectedValue = row.Item("constituencyrefno") 
     cdlConst.PrimaryKey = row.Item("uniqueid") 
End If 

次ん。しかし、私は主キープロパティにアクセスする場合後で、私は0 .. selectedValueを取得し、残りのすべては正常に動作します。

答えて

0

あなたが持っているように見える問題は、viewstateに関連しています。コントロールは、PrimaryKeyプロパティの値をコントロールのビューステートに保存しないため、値はポストバック間で保持されません。

はここでそれを行う方法を示し記事へのリンクです:ViewState and controls

+0

面白そうに見える、ありがとう! –

+0

は治療をします!わたしは、あなたを愛しています! –

0

あなたはDropDownListコントロール

ddlMyDropDown.Items.Add(新しいのListItem(obj.Name()、obj.PrimaryKey.ToString()))に追加するときに、リストアイテムの値のパラメータを使用することができます。

ASPXを::

あなたはちょうどあなたが、これはC#である

object obj = PrimaryKeyParse(ddlMyDropDown.SelectedValue); 

申し訳ありませんが、PKのためにSelectedValueのを見て、わからないことは、私がチェック手放す... VBのためにどのように見えるかを

<asp:DropDownList ID="ddlMyDropDown" runat="server"> 
    <asp:ListItem Text="-- Select --" Value="0" Selected="True"></asp:ListItem> 
    <asp:ListItem Text="ObjectName 1" Value="PK00001" ></asp:ListItem> 
    <asp:ListItem Text="ObjectName 2" Value="PK00002" ></asp:ListItem> 
</asp:DropDownList> 

HTML:

<select name="ddlMyDropDown" id="ddlMyDropDown"> 
    <option selected="selected" value="0">-- Select --</option> 
    <option value="PK00001">ObjectName 1</option> 
    <option value="PK00002">ObjectName 2</option> 
</select> 
+0

こんにちはBBV、あなたの助けに感謝します。私はあなたが何を得ているのか完全にはわかっていない、私はddlが何らかの形でアイテムのコレクションを処理する方法を変更していない。私は追加のプロパティを追加したばかりだ。したがって、上記は、通常のdropDownListと同じでなければなりません。 わかりやすくするために詳しい情報を追加します。 –

+0

Ahhhあなたはオブジェクトのビューステートにそのプロパティを追加する必要があります... Zacharyの答えを見てください – BigBlondeViking

0

理想的には、リストにバインドするときに通常行うようにオブジェクトをバインドするだけです。そして、SelectedItemをバインドされたオブジェクトとしてキャストしたいときに理想的です。

次の例では、Fooが2つのプロパティを持つクラスであると仮定します。

MyDropDownList.DataSource = new List { 
    new Foo {PK = 1, Name = "Hello"}, 
    new Foo {PK = 2, Name = "something else"} 
}; 
MyDropDownList.DataTextField = "Name"; 
MyDropDownList.DataValueField = "PK" 
MyDropDownList.DataBind(); 

現在、いくつかのイベントでは、あなたがこれを行うことができます:

var theItem = (Foo)MyDropDownList.SelectedItem; 
var mm = theItem.PK; //now you can access your object's properties 

を上記のアプローチを使用すると、DropDownListコントロールを拡張するが、ちょうどあなたのデータを取得するためのプロパティを既存のクラスを使用する必要はありません。

+0

助けてくれてありがとう、私はあなたの疑問にあなたの一部を誤解している可能性があり、そのために私は謝罪します。私のドロップダウンリストは基本的に名前/ IDのペアを持つルックアップテーブルです。私はあなたが示したようにそれを設定しました。私のデータソースは、ドロップダウンリストから値を更新したいフィールドを持っています - このデータソースのプライマリキーはドロップダウンリスト内にも保存したいのですが、アイテムごとではなくリスト全体で使用できますselecteditemchanged上の任意の更新のプライマリキー..ありがとう!私はviewStateの問題をチェックするつもりだと思う.. –

関連する問題