Afternoon All,
我习惯于使用网格视图,但我是第一次使用详细信息视图。 我正在使用带有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>
提前提供任何帮助都非常感激。
问候贝蒂
您希望使用Templatefield
,而不是"ActionStatus"的BoundField
来完成此操作。
您可以使用设计器将字段转换为TemplateField
,如下所示:
- 展开
DetailsView
角落的灰色箭头(我不记得它叫什么了),然后 - 点击"编辑字段"。
- 在"所选字段"框中,单击要更改的字段(在您的情况下为"操作状态")。
- 在窗口的右下角,单击显示"将此字段转换为模板字段"的链接
然后,您需要转到标记(源视图)并更改<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>
您还需要确保您的数据源配置了"更新命令",以便更新正常工作。
在 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