0

我有一个 ASP.NET DataGrid,其中一个列(服务)是一个标签,在编辑模式下它是一个下拉列表“

<ItemTemplate>
    <ASP:Label Text='<%# DataBinder.Eval(Container.DataItem, "ServiceName") %>'    runat="server" ID="lbSName" />
</ItemTemplate>
<EditItemTemplate>
  <ASP:DropDownList id="ddlServices" AutoPostBack="False" cssClass="DropDownList"   runat="server" datasource="<%# dvAllServices  %>" DataTextField= "ServiceName" EnableViewState="True" DataValueField="ID" OnPreRender="SetDefaultListItem" />
</EditItemTemplate>

请看图片:

在此处输入图像描述

如您所见,Dropdown 绑定到在 Page_Load 事件中填充的 dvAllServices。

问题是每次我点击编辑按钮时,这个下拉列表都会被填充并显示最上面的项目。我想显示它在编辑之前显示的任何内容。

我知道如何使用 selectedIndex 和 find 方法设置下拉索引。但我不确定在上述情况下我应该在“哪里”执行此操作。我试图在网格“编辑”事件中设置它,但是下拉列表nothing在该事件中具有价值。

任何反馈表示赞赏,

4

2 回答 2

1

试试这个它会工作

protected void gv_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow && 
        (e.Row.RowState & DataControlRowState.Edit) == DataControlRowState.Edit)
    { 
        // Here you will get the Control you need like:
        DropDownList dl = (DropDownList)e.Row.FindControl("dvAllServices ");
    }
}
于 2013-09-12T15:58:23.533 回答
0

我会接受 Bibhu 的回答,因为它给了我足够的指导。

但是由于我使用的是“DataGrid”而不是没有 RowDataBoundevent 的 GridView,因此我添加了此代码以供将来参考,以防用户使用 DataGrid 控件:

 Protected Sub grdServices_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs)

    Dim ddlrowServices As DropDownList = e.Item.Cells(2).Controls(1)

    Dim iOriginalServiceIndex As Integer = CInt(ViewState("locationOfOriginalService"))
    ddlrowServices.SelectedIndex = iOriginalServiceIndex

End Sub
于 2013-09-12T18:11:51.367 回答