1

Afternoon All,ASP.Net Details List 'Edit' function

Я использую gridviews, но я использую представление деталей в первый раз. Я использую Visual Studio 2010 с кодом VB.

У меня есть вид сетки, который отображает элементы из таблицы базы данных и использует функцию ShowSelectButton = "true", чтобы пользователи могли выбирать эти отдельные элементы и отображать полную информацию в представлении деталей.

Вышеупомянутые работы отлично. Единственная проблема, которая у меня есть, это мои данные привязаны к источнику данных и связанной с ним базе данных. В одном из этих столбцов я хочу, чтобы пользователи могли выбрать элемент (Статус действия и обновление - Outstaning, In-progress & Завершено) в виде выпадающего списка, а затем обновить его.

Im не слишком судиться, как это сделать? Вот мой код для подробного просмотра ....

 <asp:DetailsView ID="DetailsView1" runat="server" Height="50px" Width="400px" 
      AutoGenerateRows="False" 
      DataKeyNames="ActionID" DataSourceID="dsDetailsView" 
      AutoGenerateEditButton="True" CssClass="mGrid" PagerStyle-CssClass="pgr" 
      AlternatingRowStyle-CssClass="alt" HorizontalAlign="Center" 
      CellPadding="5" > 
     <AlternatingRowStyle CssClass="alt"></AlternatingRowStyle> 
     <Fields> 

      <asp:BoundField DataField="AgendaID" HeaderText="Agenda Ref:" 
      SortExpression="AgendaID" ReadOnly="true"> 
      <HeaderStyle Font-Bold="True" Font-Names="Ariel" /> 
      </asp:BoundField> 

      <asp:BoundField DataField="ActionID" HeaderText="Action ID:" 
      InsertVisible="False" ReadOnly="True" SortExpression="ActionID" 
      ItemStyle-Width="500px" > 
      <HeaderStyle Font-Bold="True" /> 
      <ItemStyle Width="500px" Font-Bold="True"></ItemStyle> 
      </asp:BoundField> 

      <asp:BoundField DataField="Action" HeaderText="Action:" 
      SortExpression="Action" ReadOnly="true"> 
      <HeaderStyle Font-Bold="True" /> 
      <ItemStyle Wrap="True" /> 
      </asp:BoundField> 

      <asp:BoundField DataField="Owner" HeaderText="Owner:" 
      SortExpression="Owner" ReadOnly="true"> 
      <HeaderStyle Font-Bold="True" Wrap="False" /> 
      <ItemStyle Wrap="False" /> 
      </asp:BoundField> 

      <asp:BoundField DataField="TargetDate" HeaderText="Target Date:" 
      SortExpression="TargetDate" ReadOnly="true" 
      DataFormatString="{0:dd-MM-yyyy} " > 
      <HeaderStyle Font-Bold="True" Wrap="True" /> 
      <ItemStyle Font-Bold="False" /> 
      </asp:BoundField> 

      <asp:BoundField DataField="DateCreated" HeaderText="Date Created:" 
      SortExpression="DateCreated" ReadOnly="true" 
      DataFormatString="{0:dd-MM-yyyy} " > 
      <HeaderStyle Font-Bold="True" Wrap="False" /> 
      </asp:BoundField> 

      <asp:BoundField DataField="ActionUpdate" HeaderText="Action Update:" 
      SortExpression="ActionUpdate" 
      NullDisplayText="Select 'Edit' to update Action..." > 
      <HeaderStyle Font-Bold="True" Wrap="False" /> 
      </asp:BoundField> 

      <asp:BoundField DataField="ActionStatus" HeaderText="Action Status:" 
      SortExpression="ActionStatus" ReadOnly="true" > 
      <HeaderStyle Font-Bold="True" Wrap="False" /> 
      </asp:BoundField> 

      <asp:BoundField DataField="ActionStatusID" HeaderText="Action Status ID:" 
      SortExpression="ActionStatusID" ReadOnly="true" Visible="true"> 
      <HeaderStyle Font-Bold="True" Wrap="False" /> 
      </asp:BoundField> 

    </Fields> 
     <PagerStyle CssClass="pgr" /> 
</asp:DetailsView> 

Любая помощь заранее значительно приближается.

С уважением Бетти

ответ

1

Чтобы выполнить это, вы хотите использовать Templatefield, а не BoundField для «ActionStatus».

Вы можете использовать конструктор для преобразования поля в TemplateField следующим образом:

  • Разверните серую стрелку в углу вашего DetailsView (я не помню, как это называется), то
  • Нажмите «Изменить поля».
  • В поле «Выбранные поля» щелкните поле, которое вы хотите изменить («ActionStatus», в вашем случае).
  • В нижней части правой части окна нажмите на ссылку «Преобразовать это поле в TemplateField»

Затем вам нужно перейти к разметке (вид источника) и изменить <EditItemTemplate> так что в нем есть DropDownList. Как это:

<asp:TemplateField HeaderText="ActionStatus" 
    SortExpression="ActionStatus"> 
    <EditItemTemplate> 
     <asp:DropdownList ID="actionStatusDDL" runat="server"> 
      <asp:ListItem Text="Outstanding" Value="Outstanding"></asp:ListItem> 
      <asp:ListItem Text="In Progress" Value="In Progress"></asp:ListItem> 
      <asp:ListItem Text="Completed" Value="Completed"></asp:ListItem> 
     </asp:DropdownList> 
    </EditItemTemplate> 

Вы также должны убедиться, что ваш DataSource имеет «UpdateCommand», сконфигурированный для того, чтобы обновление, чтобы работать должным образом.

+0

Большое спасибо за эту информацию. Мне удалось добавить дополнительные элементы, и теперь это работает. – Betty

+0

Рад, что я мог помочь! – jadarnel27

1

Добавьте DDL в TemplateField, а затем получить доступ к нему в коде позади:

  <asp:TemplateField HeaderText="Action Status list:"> 
      <ItemTemplate> 
       <asp:DropDownList runat="server" ID="ddl_ActionList" DataSource="ActionListDataSource" DataValueField="ActionStatusID" 
        DataTextField="ActionStatus"> 
       </asp:DropDownList> 
      </ItemTemplate> 
     </asp:TemplateField> 

в код используется метод поиска, чтобы получить и установить DDL выбранное значение:

Protected Sub DetailsView1_DataBound(ByVal sender As Object, ByVal e As System.EventArgs) Handles DetailsView1.DataBound 
    Dim ActionLst As DropDownList = DetailsView1.FindControl("ddl_ActionList") 
    'ActionLst.SelectedValue = set the selected value here 
End Sub 

Protected Sub DetailsView1_ItemUpdating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DetailsViewUpdateEventArgs) Handles DetailsView1.ItemUpdating 
    Dim ActionLst As DropDownList = DetailsView1.FindControl("ddl_ActionList") 
    'ActionLst.SelectedValue = get the selected value here 
End Sub