【问题标题】:SelectedValue of a dropdown (UserControl) is not getting selected inside a GridView in asp.net在 asp.net 的 GridView 中未选择下拉列表(UserControl)的 SelectedValue
【发布时间】: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


【解决方案1】:

您是否已将所选地址链接到数据源?

然后让 ddlist 链接到第二个数据源,告诉它您希望它显示什么,在这种情况下,我想显示所有内容。然后在此数据源中,您需要将所选参数更改为所选地址的下拉列表

这就是我用 vb 做的,不太确定它如何与 C im affraid 一起工作,但至少你有一个起点:)

<asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:IWSRiskAssessmentConnectionString3 %>"
        SelectCommand="SELECT * FROM [tblCompany] WHERE ([compDataID] LIKE '%' + @compDataID + '%')">
        <SelectParameters>
            <asp:ControlParameter ControlID="CompanyDD" DefaultValue="%" Name="compDataID" PropertyName="SelectedValue"
                Type="String" />
        </SelectParameters>
    </asp:SqlDataSource>

如果您需要更多帮助,请告诉我,我会看看我能做什么

【讨论】:

    【解决方案2】:

    最后我得到了解决方案,并在此处提供相同的解决方案供其他人参考。

    在 GridView 的 RowDataBound() 方法中,我获取了该 DataItem 的 DataRowView 并将 UserControl 的 SelectedValue 设置为 DataField。

    这是代码..

    protected void gv_RowDataBound(Object sender, System.Web.UI.WebControls.GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {            
            UserControlXXX ucXXX = (UserControlXXX)e.Row.FindControl("ucXXXEdit");
            DataRowView drv = (DataRowView)e.Row.DataItem;
            if (ucXXX != null) ucXXX.SelectedXXX = drv["FLDXXXCODE"].ToString();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-12
      相关资源
      最近更新 更多