【问题标题】:Newly added drop down list item attributes do not render新添加的下拉列表项属性不呈现
【发布时间】:2019-04-17 00:11:12
【问题描述】:

我有一个下拉列表,我试图在其中添加属性到它的项目。通过在VS2015中使用watch,我可以看到属性已经添加,但它们没有在页面上呈现。

DDL 位于 gridview edititemtemplate 中。我试过在这里添加属性,但运气不好。我无法访问该行中的下拉列表。我最终使用了一个行编辑处理程序。我还认为该行可能未完全处于编辑模式,因此我尝试在操作之前以编程方式使该行进入编辑模式。

     <asp:GridView ID="gvUserDetails" runat="server" DataSourceID="SqlUserDetails" AutoGenerateColumns="False" DataKeyNames="ID,EmpID" >
            <Columns>

                <asp:TemplateField HeaderText="Emp ID" SortExpression="EmpID">
                    <EditItemTemplate>
                         <asp:Label runat="server" Text='<%# Bind("EmpID") %>' ID="LabelEmpIDUpdate"></asp:Label>
                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:Label runat="server" Text='<%# Bind("EmpID") %>' ID="LabelEmpID"></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>

                <asp:TemplateField HeaderText="Notification Name" SortExpression="NotificationName">
                    <EditItemTemplate>

                        <asp:DropDownList ID="ddNotificationNameUpdt" runat="server" SelectedValue='<%# Bind("NotificationName") %>' DataSourceID="SqlNotificationNames" DataTextField="Name" DataValueField="Name"></asp:DropDownList>

                    </EditItemTemplate>

                    <ItemTemplate>
                        <asp:Label ID="LabelNotificationName" runat="server" Text='<%# Bind("NotificationName") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Filter" SortExpression="Filter">
                    <EditItemTemplate>

                        <asp:DropDownList ID="ddNotificationFilterUpdt" runat="server" DataSourceID="SqlNotificationFilters" DataTextField="Filter" DataValueField="Filter" SelectedValue='<%# Bind("Filter") %>'></asp:DropDownList>

                    </EditItemTemplate>

                    <ItemTemplate>
                        <asp:Label ID="LabelNotificationFilter" runat="server" Text='<%# Bind("Filter") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Crew Filter" SortExpression="CrewFilter">
                    <EditItemTemplate>

                        <asp:DropDownList ID="ddCrewFilterUpdt" runat="server" SelectedValue='<%# Bind("CrewFilter") %>'>
                            <asp:ListItem>*</asp:ListItem>
                            <asp:ListItem>A</asp:ListItem>
                            <asp:ListItem>B</asp:ListItem>
                            <asp:ListItem>C</asp:ListItem>
                            <asp:ListItem>D</asp:ListItem>
                        </asp:DropDownList>
                    </EditItemTemplate>

                    <ItemTemplate>
                        <asp:Label ID="LabelCrewFilter" runat="server" Text='<%# Bind("CrewFilter") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Date Begin" SortExpression="DateBgn">
                    <EditItemTemplate>

                        <asp:TextBox ID="TextBoxBgnUpdt" runat="server" Text='<%# Bind("DateBgn") %>' autocomplete="off" ></asp:TextBox>


                        <ajaxToolkit:CalendarExtender runat="server" BehaviorID="TextBoxBgnUpdt_CalendarExtender" TargetControlID="TextBoxBgnUpdt" ID="TextBoxBgnUpdt_CalendarExtender" PopupButtonID="TextBoxBgnUpdt"></ajaxToolkit:CalendarExtender>
                    </EditItemTemplate>

                    <ItemTemplate>
                        <asp:Label ID="LabelDateBgn" runat="server"  Text='<%# Bind("DateBgn") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Date End" SortExpression="DateEnd">
                    <EditItemTemplate>

                        <asp:TextBox ID="TextBoxEndUpdt" runat="server" Text='<%# Bind("DateEnd") %>' autocomplete="off" ></asp:TextBox>

                        <ajaxToolkit:CalendarExtender runat="server" BehaviorID="TextBoxEndUpdt_CalendarExtender" TargetControlID="TextBoxEndUpdt" ID="TextBoxEndUpdt_CalendarExtender"></ajaxToolkit:CalendarExtender>
                    </EditItemTemplate>

                    <ItemTemplate>
                        <asp:Label ID="LabelDateEnd" runat="server" Text='<%# Bind("DateEnd") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField ShowHeader="False">
                    <EditItemTemplate>

                        <asp:Button ID="ButtonUpdate" runat="server" CommandName="Update" Text="Update" CausesValidation="true"/>&nbsp;
                        <asp:Button ID="ButtonCancel" runat="server" CommandName="Cancel" Text="Cancel" OnClick="ButtonCancel_Click" />&nbsp;
                        <asp:Button ID="ButtonClearEndDate" runat="server" Text="Clear End Date" OnClick="ButtonClearEndDate_Click" />
                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:Button ID="btnEditNotification" runat="server" Text="Edit" CommandName="Edit" CausesValidation="False" OnClick="btnEditNotification_Click"/>
                        &nbsp;<asp:Button ID="btnDeleteNotification" runat="server" Text="Delete" CommandName="Delete" CausesValidation="False"  OnClientClick = " return confirm('Are you sure you want to delete this notification?');"/>
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
            <AlternatingRowStyle BackColor="LemonChiffon" />

        </asp:GridView>
    Dim gv As GridView = CType(sender, GridView)
    gv.Rows(e.NewEditIndex).RowState = DataControlRowState.Edit
    For i As Integer = 0 To gv.Rows.Count - 1
                If i <> e.NewEditIndex Then
                    gridRow = gv.Rows(i)
                    For Each cell As Control In gridRow.Cells
                        For Each ctl As Control In cell.Controls
                            If TypeOf ctl Is DropDownList Then
                                foundDropList = CType(ctl, DropDownList)
                                If foundDropList.ID.Equals("ddNotificationNameUpdt") Then
                                    Debug.Print("found the list")
                                    dropListToUse = foundDropList
                                End If
                            End If
                        Next
                    Next
                End If
            Next

    For Each item As ListItem In dropListToUse.Items
                item.Attributes("Title") = NotificationNameTable(item.Text)
            Next

我希望用户单击 gridview 的 Edit 按钮,然后单击正在编辑的行的下拉列表,以便为每个列表项具有名为“Title”的新属性。有什么帮助吗?

【问题讨论】:

  • 你能展示一些设计器代码吗?或标记
  • 是的。我用标记更新了我的帖子。

标签: vb.net drop-down-menu attributes


【解决方案1】:

我能够弄清楚。如果我使用 RowDataBound 事件来捕捉 GridView 编辑按钮的单击,并确保 RowState 和 DataControlRowState.Edit 都大于 0,我将使 GridView 处于我想要的状态。然后我将能够使用 e.Row.FindControl() 找到我的控件。然后我只是遍历列表项并添加在屏幕上正确呈现的属性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-03
    • 1970-01-01
    • 1970-01-01
    • 2015-09-13
    • 2015-04-24
    • 1970-01-01
    • 2015-06-24
    • 2012-08-29
    相关资源
    最近更新 更多