如何在编辑模式下设置dropdownlist selectedvalue,而不在gridview中设置?

时间:2013-07-07 21:57:28

标签: asp.net vb.net

使用下面的代码,当我单击Edit按钮时,gridview下拉列表中的selectvalue会被保留,同时保留其余的下拉列表值,以便用户可以选择不同的值。

Protected Sub RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs)
    If e.Row.RowType = DataControlRowType.DataRow AndAlso gvCustomers.EditIndex = e.Row.RowIndex Then
        Dim ddlRoles As DropDownList = DirectCast(e.Row.FindControl("ddlRoles"), DropDownList)
        Dim query As String = "select RoleId, Roles from ROLES"
        Dim cmd As New SqlCommand(query)
        ddlRoles.DataSource = GetData(cmd)
        ddlRoles.DataTextField = "Roles"
        ddlRoles.DataValueField = "RoleId"
        ddlRoles.DataBind()
        ddlRoles.Items.FindByValue(TryCast(e.Row.FindControl("lblUserRole"), Label).Text).Selected = True
    End If
End Sub

“//标记:

<asp:Label ID="lblUserRole" runat="server" Text='<%# Eval("RoleId")%>' Visible = "false"></asp:Label>
<asp:DropDownList ID = "ddlRoles" runat = "server">
</asp:DropDownList>

这些适用于gridview。

但是,我想将代码隐藏更改为常规Web表单,以便我可以更好地操作布局。

换句话说,我有这样的布局:

名字: _ __ _ __ _ __ _ ___ < / p>

姓氏: _ __ _ __ _ __ _ ____ < / p>

角色: _ __ _ __ _ __ _ __ _ ___

我的理解是在gridview中,布局是垂直的,不灵活。

我们希望我们的布局是水平的。

提前感谢您的帮助

1 个答案:

答案 0 :(得分:0)

您必须使用TemplateField,在该模板中,您可以指定布局,其中可能包含多个字段,并使用不同的控件进行编辑/插入操作,如下例所示:

清单1。

<asp:TemplateField HeaderText="Toll-Free: Area/Phone #">
            <ItemTemplate>
                    (
                    <%# DataBinder.Eval( Container.DataItem, "A_TollFree_AreaCode" )%>
                    )
                    <%# DataBinder.Eval(Container.DataItem, "A_TollFree_Number")%>                                  
             </ItemTemplate>
             <EditItemTemplate>
                <asp:TextBox ID="txtAreaCode" runat="server" 
                CssClass="phoneAreaCode" MaxLength="3"
                Text='<%# Bind("A_TollFree_AreaCode") %>'  />
                <asp:TextBox ID="txtPhoneNumber" runat="server" 
                CssClass="phoneNumber" MaxLength="20"
                Text='<%# Bind("A_TollFree_Number") %>' />
              </EditItemTemplate>                                  
              <InsertItemTemplate>
                <asp:TextBox ID="txtAreaCode" runat="server" 
                CssClass="phoneAreaCode" MaxLength="3" 
                Text='<%# Bind("A_TollFree_AreaCode") %>' />
                <asp:TextBox ID="txtPhoneNumber" runat="server" 
                CssClass="phoneNumber" MaxLength="20"
                Text='<%# Bind("A_TollFree_Number") %>' />
              </EditItemTemplate>                                    
              </InsertItemTemplate>
    </asp:TemplateField>

关于第二个问题(在评论中),请参阅清单2.它演示了访问GridView中各种控件的一般技巧:

清单2。

protected void GridView1_OnRowDataBound(object sender, GridViewRowEventArgs e)
{
    try
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            string _strPhone = DataBinder.Eval(e.Row.DataItem, "txtPhoneNumber").ToString();
            Button btn = (Button)e.Row.Cells[0].Controls[1];
        }
    }
    catch { }
}

最诚挚的问候,