#vb.net #drop-down-menu #attributes
#vb.net #выпадающее меню #атрибуты
Вопрос:
У меня есть выпадающий список, в котором я пытаюсь добавить атрибуты к его элементам. Используя watch в VS2015, я вижу, что атрибуты были добавлены, но они не отображаются на странице.
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"/>amp;nbsp;
<asp:Button ID="ButtonCancel" runat="server" CommandName="Cancel" Text="Cancel" OnClick="ButtonCancel_Click" />amp;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"/>
amp;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, а затем выпадающий список редактируемой строки, чтобы иметь новые атрибуты, называемые «Заголовок» для каждого из элементов списка. Любая помощь?
Комментарии:
1. можете ли вы показать какой-нибудь дизайнерский код? или разметка
2. ДА. Я обновил свой пост с помощью разметки.
Ответ №1:
Я смог это выяснить. Если я использую событие RowDataBound для отслеживания кнопки редактирования GridView, нажмите и убедитесь, что RowState и DataControlRowState.Если оба параметра больше 0, у меня будет GridView в том состоянии, в котором я хочу. Затем я смогу найти свой элемент управления с помощью e.Row.FindControl(). Затем я просто перебираю элементы списка и добавляю атрибуты, которые правильно отображаются на экране.