1

下午所有,

我习惯使用gridviews,但我第一次使用aa details view。我正在使用带有 VB 代码的 Visual Studio 2010。

我有一个网格视图,它显示数据库表中的项目并使用'ShowSelectButton="true"' 函数使用户能够选择这些单个项目并在详细信息视图中显示完整信息。

以上工作正常。我唯一的问题是我的数据绑定到数据源和关联的数据库。在其中一个列上,我希望用户能够以下拉列表的形式选择一个项目(操作状态和更新 - 未完成、进行中和已完成),然后对其进行更新。

我不太起诉如何完成这个?这是我的详细信息视图代码....

        <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>

任何提前的帮助都是非常重要的。

问候贝蒂

4

2 回答 2

1

在 TemplateField 中添加 ddl,然后在后面的代码中访问它:

            <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>

在后面的代码中使用 find 方法来获取和设置您的 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
于 2012-05-29T13:37:16.177 回答
1

您想使用Templatefield, 而不是BoundField"ActionStatus" 来完成此操作。

您可以使用设计器将字段转换为 a TemplateField,如下所示:

  • 展开你角落里的灰色箭头DetailsView(我不记得它叫什么了),然后
  • 点击“编辑字段”。
  • 在“选定字段”框中,单击要更改的字段(在您的情况下为“ActionStatus”)。
  • 在窗口的右下方,单击“将此字段转换为模板字段”链接

然后您需要转到您的标记(源视图)并更改该<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”,以便更新正常工作。

于 2012-05-29T13:50:25.867 回答