0

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

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 表单,以便更好地操作布局。

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

名字:_ __ _ __ _ __ _ ___

姓氏:_ __ _ __ _ __ _ ____

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

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

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

预先感谢您的帮助

4

1 回答 1

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

此致,

于 2013-07-07T23:05:10.783 回答