我正在尝试扩展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,其余的都工作正常。
答案 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