我有一个ListView,可以在Page_Load
期间以及从EditItemTemplate
转到ItemTemplate
时填充并显示用户的数据(通过VWD 2008中的个人资料系统)。
当我再次进入编辑屏幕时,我的DropDownList和RadioButtonList控件显示相应表格中的第一项而不是正确的配置文件值。
我不明白为什么控件第一次和第二次正确填充但第三次不正确填充(这是正确的,第三次不是魅力)。
有人可以帮我理解如何解决这个问题吗?
的ItemTemplate:
<asp:DropDownList ID="ddlTState" AppendDataBoundItems="True"
DataSourceID="srcState" DataTextField="StateName" DataValueField="StateName"
Enabled="False" TabIndex="125" runat="server" />
EditItemTemplate中:
<asp:DropDownList ID="ddlEState" AppendDataBoundItems="true"
DataSourceID="srcState" DataTextField="StateName"
DataValueField="StateName" TabIndex="125" runat="server">
<asp:ListItem Text="--State--" Value="" />
VB代码
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
lsv = Util.FindChild(Me, "lsvProfile")
'If Not IsPostBack Then
ddl = Util.FindChild(lsv, "ddlEState") 'Util.FindChild = my version of FindControl
If ddl IsNot Nothing Then ddl.SelectedValue = Profile.State
ddl = Util.FindChild(lsv, "ddlTState")
If ddl IsNot Nothing Then ddl.SelectedValue = Profile.State
'End If
End Sub
答案 0 :(得分:0)
它可能是在达到空状态而不是写作;处理项目/编辑模板的更好方法是使用ItemDataBound事件或ItemCreated事件处理程序。这个功能在它创建行时,您将在那里取得更好的成功。我相信你也可以利用ItemEditing,当一行切换到编辑模式时会激活它,作为处理编辑操作的另一种方式。
编辑:尝试这样做:
protected void lsvProfile_ItemDataBound(..)
{
if (e.Item.ItemTYpe == ListViewItemType.DataItem)
{
DropDownList d = e.Item.FindControl("ddlTState") as DropDownList;
}
}
并调试以查看它是否为null。应该为null的唯一时间是,如果它呈现页眉/页脚或编辑项......那应该有效,我会一直这样做。
HTH。
答案 1 :(得分:0)
谢谢,Brian。在我阅读你的最新帖子之前,我用这段代码解决了这个问题:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
lsv = Util.FindChild(Page, "lsvProfile")
If Not IsPostBack Then
Try
lsv.EditIndex = 0
rbl = Util.FindChild(lsv, "rblEGender")
If rbl IsNot Nothing Then rbl.SelectedValue = Profile.Gender
ddl = Util.FindChild(lsv, "ddlEState")
If ddl IsNot Nothing Then ddl.SelectedValue = Profile.State
ddl = Util.FindChild(lsv, "ddlEBirthDay")
If ddl IsNot Nothing Then ddl.SelectedValue = Profile.BirthDay
ddl = Util.FindChild(lsv, "ddlEBirthMo")
If ddl IsNot Nothing Then ddl.SelectedValue = Profile.BirthMo
Catch ex As Exception
End Try
End If
End Sub
Protected Sub lsvProfile_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.ListViewItemEventArgs) Handles lsvProfile.ItemDataBound
ddl = Util.FindChild(Me, "ddlEState")
If ddl IsNot Nothing Then ddl.SelectedValue = Profile.State
ddl = Util.FindChild(Me, "ddlEBirthMo")
If ddl IsNot Nothing Then ddl.SelectedValue = Profile.BirthMo
ddl = Util.FindChild(Me, "ddlEBirthDay")
If ddl IsNot Nothing Then ddl.SelectedValue = Profile.BirthDay
rbl = Util.FindChild(Me, "rblEGender")
If rbl IsNot Nothing Then rbl.SelectedValue = Profile.Gender
End Sub