下午全部,
我习惯使用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>
提前获得的任何帮助都是很有用的。
此致 贝蒂
答案 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
角落的灰色箭头(我不记得它叫什么),然后然后您需要转到标记(源视图)并更改<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”,以便更新正常运行。