在asp.net DropDownList中添加一个额外的属性

时间:2009-07-08 15:06:22

标签: asp.net custom-controls

我正在尝试扩展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

编辑:

为清楚起见,我正在使用带有我的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

但是如果我以后访问了primaryKey属性,我得到0 .. selectedValue,其余的都工作正常。

3 个答案:

答案 0 :(得分:0)

将它添加到DropDownList

时,可以使用ListItem的value参数吗?

ddlMyDropDown.Items.Add(new ListItem(obj.Name(),obj.PrimaryKey.ToString()));

你只需看看你的PK的SelectedValue

object obj = PrimaryKeyParse(ddlMyDropDown.SelectedValue);

很抱歉这是在c#中,不知道VB的样子......让我去检查一下:

ASPX:

<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>

答案 1 :(得分:0)

理想情况下,你应该做的只是绑定一个对象,就像绑定到列表时一样,然后当你希望SelectedItem只是将它作为它所绑定的对象时。

对于以下示例,假设Foo是一个具有2个属性的类...一个PK和一个名称;

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,只需使用类的现有属性来获取数据。

答案 2 :(得分:0)

您似乎遇到的问题与viewstate有关。您的控件不会将PrimaryKey属性的值保存到控件的视图状态中,因此返回值之间不会保留该值。

以下是一篇文章的链接,该文章演示了如何执行此操作:ViewState and controls