【问题标题】:Can child controls use their parent's datasource?子控件可以使用父控件的数据源吗?
【发布时间】:2012-11-29 14:54:15
【问题描述】:

我有以下标记:

<div class="section">
    <p runat="server" id="sectionName"></p>
</div>
<div class="label">
    <div class="activity-header">Activity</div>
    <div class="status-header">Status</div>
    <div class="comment-header">Comment</div>
</div>
<asp:Repeater ID="rptActivity" runat="server">
    <ItemTemplate>
        <div class="under-label">
            <div class="activity">
                <%#Eval("ActivityName")%>
                <input type="hidden" name="activityId" value='<%#Eval("ActivityId")%>' />
            </div>

            <div class="status">
                <asp:DropDownList ID="ddlStatuses" DataValueField="Id" DataTextField="Name" DataSourceID="SqlDataSource1" runat="server"></asp:DropDownList>
            </div>
            <div class="comment">
                <textarea name="comments" cols="35" rows="3" name="comment" style="float: left; margin: 0px 0px 0px 25px; font-family: Geneva, Arial, Helvetica, sans-serif;"><%#Eval("Comment")%></textarea>
            </div>
        </div>
    </ItemTemplate>
</asp:Repeater>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:PhumafConnectionString %>" SelectCommand="SELECT * FROM [Status]">
</asp:SqlDataSource>

rptActivityRepeater的数据源是List,Helper定义如下:

public class Helper
{
    public string ActivityName { get; set; }
    public long ActivityId { get; set; }
    public long StatusId { get; set; }
    public string Comment { get; set; }
}

如您所见,我将相关字段绑定到实体的属性,并将所有 ddlStatuse 绑定到返回所有状态的数据源。但是,由于这是一个更新屏幕,我希望拥有之前选择的状态已选中,我通过 Helper 实体的道具 StatusId 获得了该 ID。

尝试将 ddlStatuses 的 SelectedValue 设置为 &lt;%# Eval("StatusId") %&gt;,但它引发了我只能从控件绑定的数据源调用 props 的异常。

基本上我有我需要在 ddlStatuses 中选择它们的 StatusIds。

我该怎么做?

编辑:

我忘了提到我想到的解决方案之一是将 List&lt;Status&gt; 作为一个属性包含在帮助程序类中,这样我就可以拥有 statusId 以及所有其他状态,但这不起作用如果我不能使用父母的数据源。

【问题讨论】:

标签: c# asp.net drop-down-menu


【解决方案1】:

【讨论】:

  • 感谢您花时间帮助我解决这个问题。我不太确定这有什么帮助?中继器的 OnItemCreated 事件应该怎么做?我可以通过 EventArgs 访问哪些数据?
  • (Helper)e.Item.DataItem 将为您提供基础来源。然后使用DropDownList ddl = (DropDownList)FindControl("ddlStatuses") 并在此处选择相关值。我没有对此进行测试,但应该可以,如果您有问题,请告诉我
  • 由于某种奇怪的原因,它找不到 ddlStatuses。我使用 DropDownList ddl = (DropDownList) FindControl("ddlStatuses");第 50 行:ddl.SelectedValue = helper.StatusId.ToString();我在第 50 行得到空指针异常。它找不到 ddl
  • 也许我应该提到所有这一切都发生在用户控件中。我试图从下拉列表所在的同一个用户控件访问 ddl,所以我不应该有任何区别认为
  • 我做了一些更正:) DropDownList ddl = (DropDownList)e.Item.FindControl("ddlStatuses")
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多