【发布时间】:2011-08-11 13:32:06
【问题描述】:
我创建了一个用户控件(下拉)并在 GridView 的 EditTemplate 中使用它。
<EditItemTemplate>
<eluc:AddrType ID="ucIssuingAuthorityEdit" runat="server" AddressType="139" AddressList='<%# PhoenixRegistersAddress.ListAddress("139") %>'
AppendDataBoundItems="true" CssClass="dropdown_mandatory" SelectedAddress='<%# DataBinder.Eval(Container,"DataItem.FLDISSUINGAUTHORITY") %>' />
</EditItemTemplate>
SelectedAddress 是设置下拉列表的 SelectedValue 的属性。如果我在正常的 aspx 页面中使用相同的用户控件,它将被选中。但是 GridView 内部没有被选中。
用户控件中用于选择的代码是:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
ddlAddressType.DataSource = PhoenixRegistersAddress.ListAddress(addresstype);
ddlAddressType.DataBind();
foreach (ListItem item in ddlAddressType.Items)
{
if (item.Value == _selectedValue.ToString())
{
item.Selected = true;
break;
}
}
}
}
这里是 SelectedAddress 属性
public string SelectedAddress
{
get
{
return ddlAddressType.SelectedValue;
}
set
{
if (value.Trim().Equals(""))
return;
_selectedValue = Int32.Parse(value);
foreach (ListItem item in ddlAddressType.Items)
{
if (item.Value == _selectedValue.ToString())
{
item.Selected = true;
break;
}
}
}
}
谁能告诉我为什么会这样。
提前谢谢..
【问题讨论】:
-
您是在每次回发时绑定 GridView 还是仅在
!Page.IsPostback时绑定? -
在每次回发中我都会绑定它。
-
你在哪里设置 GridView 中的 SelectedAddress?
-
@Asr:您不应该在每次回发时在 Page_Load 中绑定 GridView,这会阻止事件被触发并导致丢失 SelectedValue。你为什么这样做?您应该在需要时使用事件而不是 page_load 来重新绑定网格。
-
我已将 GridView 的 EnableViewState 属性设置为 false。所以我必须在每次回发中绑定 GridView。
标签: asp.net gridview user-controls