2013-07-07 91 views
0

使用下面的代码,当我点击Edit按钮时,gridview下拉列表中的selectvalue被保留,同时保留下拉列表值的其余部分,以便用户可以选择不同的值。如何在编辑模式下设置dropdownlist selectedvalue,但不在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控件,布局是垂直的,而不是灵活。

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

预先感谢您的协助

回答

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.为D emonstrates在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 { } 
} 

最好的问候,

+0

非常感谢你。我如何访问控件ID,例如txtPhoneNumber? –

相关问题