【问题标题】:set value of dropdownlist inside a repeater在中继器内设置下拉列表的值
【发布时间】:2016-11-11 20:52:27
【问题描述】:

我有一个中继器,里面有一个下拉列表。中继器之外还有另一个单独的下拉列表。用户将在此 ddl 中选择一个值,单击一个按钮,所选值将填充到中继器内所有空白的 ddl 中。注意: ddl 有选定值的文本(不是整数)。

很遗憾,我的代码无法正常工作。

我的标记:

<asp:Repeater ID="AttendanceRepeater" runat="server" DataSourceID="AttendanceSqlDataSource" OnItemDataBound="AttendanceRepeater_ItemDataBound">
                <ItemTemplate>
                    <br />
                    <table>
                        <tr>
                            <td style="width: 50px"></td>
                            <td style="width: 300px">
                                <asp:Label ID="StudentNameLabel" runat="server" Text='<%# Eval("STUDENT_NAME") %>'></asp:Label>
                            </td>
                            <td style="width: 200px">
                                <asp:DropDownList ID="AttendStatusDropDownList" runat="server"
                                    SelectedValue='<%# Eval("ATTENDANCE_STATUS") %>'>
                                    <asp:ListItem Value="" Text=""></asp:ListItem>
                                    <asp:ListItem Value="ABSENTE" Text="Absent Excused"></asp:ListItem>
                                    <asp:ListItem Value="ABSENTU" Text="Absent Unexcused"></asp:ListItem>
                                    <asp:ListItem Value="CIN" Text="Chk In No (Absent)"></asp:ListItem>
                                    <asp:ListItem Value="CIY" Text="Chk In Yes (Present)"></asp:ListItem>
                                    <asp:ListItem Value="NR" Text="Attend Not Reqd"></asp:ListItem>
                                    <asp:ListItem Value="PRESENT" Text="Present"></asp:ListItem>
                                    <asp:ListItem Value="TM005" Text="Time Missed 005 Min"></asp:ListItem>
                                    <asp:ListItem Value="TM010" Text="Time Missed 010 Min"></asp:ListItem>
                                    <asp:ListItem Value="TM015" Text="Time Missed 015 Min"></asp:ListItem>
                                    <asp:ListItem Value="TM030" Text="Time Missed 030 Min"></asp:ListItem>
                                    <asp:ListItem Value="TM045" Text="Time Missed 045 Min"></asp:ListItem>
                                    <asp:ListItem Value="TM060" Text="Time Missed 1hr"></asp:ListItem>
                                    <asp:ListItem Value="TM075" Text="Time Missed 1hr 15mi"></asp:ListItem>
                                    <asp:ListItem Value="TM090" Text="Time Missed 1hr 30mi"></asp:ListItem>
                                    <asp:ListItem Value="TM105" Text="Time Missed 1hr 45mi"></asp:ListItem>
                                    <asp:ListItem Value="TM120" Text="Time Missed 2hr"></asp:ListItem>
                                    <asp:ListItem Value="TM135" Text="Time Missed 2hr 15mi"></asp:ListItem>
                                    <asp:ListItem Value="TM150" Text="Time Missed 2hr 30mi"></asp:ListItem>
                                    <asp:ListItem Value="TM165" Text="Time Missed 2hr 45mi"></asp:ListItem>
                                    <asp:ListItem Value="TM180" Text="Time Missed 3hr"></asp:ListItem>
                                    <asp:ListItem Value="TM195" Text="Time Missed 3hr 15mi"></asp:ListItem>
                                    <asp:ListItem Value="TM210" Text="Time Missed 3hr 30mi"></asp:ListItem>
                                    <asp:ListItem Value="TM225" Text="Time Missed 3hr 45mi"></asp:ListItem>
                                    <asp:ListItem Value="TM240" Text="Time Missed 4hr"></asp:ListItem>
                                    <asp:ListItem Value="TM255" Text="Time Missed 4hr 15mi"></asp:ListItem>
                                    <asp:ListItem Value="TM310" Text="Time Missed 4hr 30mi"></asp:ListItem>
                                    <asp:ListItem Value="TM325" Text="Time Missed 4hr 45mi"></asp:ListItem>
                                    <asp:ListItem Value="WD" Text="Withdrawn"></asp:ListItem>
                                </asp:DropDownList>
                                <asp:RequiredFieldValidator ID="AttendStatusValidator" runat="server"
                                    ErrorMessage="Required field" ControlToValidate="AttendStatusDropDownList">
                                </asp:RequiredFieldValidator>
                            </td>
                            <td style="width: 200px">
                                <asp:TextBox ID="CommentsTextBox" runat="server" TextMode="MultiLine" 
                                    Text='<%# Eval("COMMENTS") %>'></asp:TextBox>
                            </td>
                            <td>
<%--                                <asp:CheckBox ID="ChangeCheckBox" runat="server" Visible="true" />--%>
                                <asp:Label ID="PeopleCodeIdLabel" runat="server" Visible="false" Text='<%# Eval("PEOPLE_CODE_ID") %>'></asp:Label>
                                <asp:Label ID="AcademicYearLabel" runat="server" Visible="false" Text='<%# Eval("ACADEMIC_YEAR") %>'></asp:Label>
                                <asp:Label ID="AcademicTermLabel" runat="server" Visible="false" Text='<%# Eval("ACADEMIC_TERM") %>'></asp:Label>
                                <asp:Label ID="AcademicSessionLabel" runat="server" Visible="false" Text='<%# Eval("ACADEMIC_SESSION") %>'></asp:Label>
                                <asp:Label ID="EventIdLabel" runat="server" Visible="false" Text='<%# Eval("EVENT_ID") %>'></asp:Label>
                                <asp:Label ID="EventSubTypeLabel" runat="server" Visible="false" Text='<%# Eval("EVENT_SUB_TYPE") %>'></asp:Label>
                                <asp:Label ID="SectionLabel" runat="server" Visible="false" Text='<%# Eval("SECTION") %>'></asp:Label>
                                <asp:Label ID="TranAttendanceIdLabel" runat="server" Visible="false" Text='<%# Eval("TranAttendanceId") %>'></asp:Label>
                            </td>
                        </tr>
                    </table>
                    <br />
                </ItemTemplate>
            </asp:Repeater>

按钮代码:(注意下拉菜单的命名。AttendanceStatusdropdownlist 和 AttendStatusAllDropDownList)

    protected void ApplyToAllButton_Click(object sender, EventArgs e)
{
    string defaultStatus = AttendStatusAllDropDownList.SelectedValue;

    foreach (RepeaterItem item in AttendanceRepeater.Items)
    {
        DropDownList ddl = (DropDownList)item.FindControl("AttendanceStatusDropDownList");
        if (string.IsNullOrWhiteSpace(ddl.SelectedValue))
        {
            //set the ddl to the value selected from the other ddl
            ddl.SelectedValue = defaultStatus;

        }
    }
    //Save changes to all
    SaveButton_Click(null, null);
}

这些值未填充到中继器内的下拉列表中。我搜索了谷歌,但找不到任何特定于我正在尝试的内容。任何帮助将不胜感激。

提前致谢。 皮特

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    您的FindControl 值与Repeater 内DropDownList 的ID 存在差异。

    中继器:AttendStatusDropDownList

    查找控制:AttendanceStatusDropDownList

    请参阅下面更新的 sn-p。

    protected void ApplyToAllButton_Click(object sender, EventArgs e)
    {
        foreach (RepeaterItem item in AttendanceRepeater.Items)
        {
            DropDownList ddl = (DropDownList)item.FindControl("AttendStatusDropDownList");
    
            if (ddl != null && string.IsNullOrEmpty(ddl.SelectedValue))
            {
                ddl.SelectedValue = AttendStatusAllDropDownList.SelectedValue;
            }
        }    
    }
    

    ASPX 页面

    <asp:DropDownList ID="AttendStatusAllDropDownList" runat="server">
        <asp:ListItem Value="" Text=""></asp:ListItem>
        <asp:ListItem Value="TM005" Text="Time Missed 005 Min"></asp:ListItem>
        <asp:ListItem Value="TM010" Text="Time Missed 010 Min"></asp:ListItem>
        <asp:ListItem Value="TM015" Text="Time Missed 015 Min"></asp:ListItem>
        <asp:ListItem Value="TM030" Text="Time Missed 030 Min"></asp:ListItem>
        <asp:ListItem Value="TM045" Text="Time Missed 045 Min"></asp:ListItem>
    </asp:DropDownList>
    <br />
    <asp:Button ID="Button1" runat="server" Text="Button" OnClick="ApplyToAllButton_Click" CausesValidation="false" />
    <br />
    <br />
    <asp:Repeater ID="AttendanceRepeater" runat="server">
        <ItemTemplate>
            <asp:DropDownList ID="AttendStatusDropDownList" runat="server">
                <asp:ListItem Value="" Text=""></asp:ListItem>
                <asp:ListItem Value="TM005" Text="Time Missed 005 Min"></asp:ListItem>
                <asp:ListItem Value="TM010" Text="Time Missed 010 Min"></asp:ListItem>
                <asp:ListItem Value="TM015" Text="Time Missed 015 Min"></asp:ListItem>
                <asp:ListItem Value="TM030" Text="Time Missed 030 Min"></asp:ListItem>
                <asp:ListItem Value="TM045" Text="Time Missed 045 Min"></asp:ListItem>
            </asp:DropDownList><br />
        </ItemTemplate>
    </asp:Repeater>
    

    【讨论】:

    • 我要记得检查小事!谢谢,但是改了之后还是不行。需要注意的一件事:在进行分配之前,我需要确保 attenstatusdropdownlist.selectedvalue 为空。所以我稍微修改了代码。
    • 我已经添加了我的测试 sn-p。如果我更改 AttendStatusAllDropDownList 并按下按钮,Repeater 内的所有值都会更新,没有选择。因此,如果您的 sn-p 不起作用,请在其他页面上尝试我的 sn-p 并开始添加内容,以便您了解问题所在。
    • 我发现了问题。我在转发器内的下拉列表中有一个必填字段验证器。我尝试删除它,现在 ddl 被填充(它有效)。但该字段是必需的。我想我会尝试使用自定义验证器,看看它是否仍然有效。
    • 只需将CausesValidation="false" 添加到设置所有值的按钮即可。
    • 我添加了 CausesValidation="false" 并填充了该字段,但它没有在视觉上填充,即下拉菜单中没有显示任何内容。我尝试使用自定义验证器,但智能感知无法在代码文件中识别它,如果我尝试引用它,则会出现编译器错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-12
    • 1970-01-01
    • 2011-09-02
    • 2011-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多