ASP.Net详细信息列表'编辑'功能

时间:2012-05-29 13:09:36

标签: asp.net visual-studio-2010 visual-studio asp.net-controls

下午全部,

我习惯使用gridviews,但我第一次使用详情视图。我正在使用Visual Studio 2010和VB代码。

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

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

我不是太开始如何完成这个?这是我的详细信息视图....

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

提前获得的任何帮助都是很有用的。

此致 贝蒂

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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”,以便更新正常运行。