Недавно добавленные атрибуты выпадающего списка не отображаются - PullRequest
0 голосов
/ 17 апреля 2019

У меня есть выпадающий список, в котором я пытаюсь добавить атрибуты к его элементам. Используя watch в VS2015, я вижу, что атрибуты были добавлены, но они не отображаются на странице.

DDL находится в шаблоне редактирования сетки вида. Я попытался добавить атрибуты здесь, но не повезло. У меня были проблемы с доступом к выпадающему списку в строке. В итоге я использовал обработчик строк Я также подумал, что строка может быть не полностью в режиме редактирования, поэтому я попытался перевести эту строку в режим редактирования программным образом до выполнения моих операций.

     <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

Я ожидаю, что пользователь нажмет кнопку «Изменить» в окне сетки, а затем выпадающий список редактируемой строки, чтобы иметь новые атрибуты под названием «Заголовок» для каждого элемента списка. Любая помощь?

1 Ответ

1 голос
/ 18 апреля 2019

Я смог понять это. Если я использую событие RowDataBound, чтобы поймать нажатие кнопки GridView Edit и убедиться, что RowState и DataControlRowState.Edit больше 0, я получу GridView в том состоянии, которое мне нужно. Затем я смогу найти свой элемент управления с помощью e.Row.FindControl (). Затем я просто перебираю элементы списка и добавляю атрибуты, которые правильно отображаются на экране.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...