2010-08-13 11 views
8

Estoy tratando de hacer this como se le preguntó anteriormente. La única diferencia que encontré es un elemento de lista adicional que se incluyó en el código anterior.Cómo establecer SelectedValue de DropDownList en GridView EditTemplate

Intenté usar AppendDataBoundItems=true pero todavía no está funcionando. También quiero establecer el valor predeterminado para el valor que se muestra en la etiqueta de itemtemplate, es decir, DropDownList SelectedValue='<%# Eval("DepartmentName") %>', pero esta propiedad no está disponible para mí en la lista desplegable. ¿Cuál podría ser el motivo? ??

<EditItemTemplate> 
    <asp:DropDownList ID="ddlDepartment_Edit" runat="server" 
     DataSourceID="dsDepartment_Edit" DataTextField="DepartmentName" 
     DataValueField="PK_DepartmentId"> 
    </asp:DropDownList> 
    <asp:SqlDataSource ID="dsDepartment_Edit" runat="server" 
     ConnectionString="<%$ ConnectionStrings:BlackHillsConnect %>" 
     ProviderName="System.Data.SqlClient" SelectCommand="sp_GetDepartmentDropDown" 
     SelectCommandType="StoredProcedure"> 
    </asp:SqlDataSource>         
</EditItemTemplate> 
<ItemTemplate> 
    <asp:Label ID="lblDepartmentName" runat="server" Text='<%# Eval("DepartmentName") %>' > 
    </asp:Label> 
</ItemTemplate> 

estoy usando GridView

Respuesta

8

DataValueField parece estar mal - ¿no debería ser DepartmentId? Del mismo modo, necesita tener SelectedValue='<%# Eval("**DepartmentId**") %>' - DepartmentName sería el SeletectText.

+2

aquí es donde estoy en problemas. La propiedad no se está haciendo visible para mí, es decir, SelectedValue o SelectedText, por lo que puedo asignarles algún valor. Acerca de DataValueField, sí tiene razón, debería ser la clave principal. Pero no forma parte de la discusión hasta que estas dos propiedades estén disponibles para mí. –

+2

VS Designer puede que no le muestre la propiedad en inteligencia, pero está allí. Hay dos propiedades: SelectedValue y SelectedIndex. ¿Qué sucede si escribe SelectedIndex = '<% # Eval (' DepartmentId ')%>'? – VinayC

+0

Mi error - debería haber sido como SelectedValue = '<% # Eval (' DepartmentId ')%>'. – VinayC

0

En su grilla hay un evento llamado ItemCommand. Crear un método para ello:

protected void Grid1_ItemCommand(object source, GridCommandEventArgs e) 

Ahora basta con crear una declaración de caso que reconocerá cuando el usuario ha hecho clic en el botón Editar en la parrilla:

case Grid.EditCommandName:  
//set a member variable to the string of the cell you are editing. 
//something like: mString = e.item..["Column"].toString();     
        break; 

Ahora usted tiene una variable miembro establecido en el cadena que desea que se seleccione antes de que el menú desplegable se cargue o pregrabe. Use el evento OnPrerender o OnLoad para el dropdownbox y configure el elemento seleccionado para esta Cadena.

3

El uso del controlador de eventos GridView_DataBound resuelve el problema.

En su caso, tendrá que añadir un HiddenField para almacenar el valor PK_DepartmentId:

<asp:GridView ID="gvExample" runat="server" AutoGenerateColumns="False" OnDataBound="gvExample_DataBound"> 
    <Columns> 
    <asp:TemplateField HeaderText="Department"> 
     <EditItemTemplate> 
     <asp:DropDownList ID="ddlDepartment_Edit" runat="server" DataSourceID="dsDepartment_Edit" 
      DataTextField="DepartmentName" DataValueField="PK_DepartmentId"> 
     </asp:DropDownList> 
     <asp:HiddenField ID="hfDepartmentId" runat="server" Value='<%# Bind("PK_DepartmentId") %>' /> 
     <asp:SqlDataSource ID="dsDepartment_Edit" runat="server" ConnectionString="<%$ ConnectionStrings:BlackHillsConnect %>" 
      ProviderName="System.Data.SqlClient" SelectCommand="sp_GetDepartmentDropDown" SelectCommandType="StoredProcedure"> 
     </asp:SqlDataSource> 
     </EditItemTemplate> 
     <ItemTemplate> 
     <asp:Label ID="lblDepartmentName" runat="server" Text='<%# Eval("DepartmentName") %>'> 
     </asp:Label> 
     </ItemTemplate> 
    </asp:TemplateField> 
    <asp:CommandField ShowEditButton="True" ButtonType="Button" /> 
    </Columns> 
</asp:GridView> 

protected void gvExample_DataBound(object sender, EventArgs e) 
{ 
    foreach (GridViewRow gvRow in gvExample.Rows) 
    { 
    DropDownList ddlDepartment = gvRow.FindControl("ddlDepartment_Edit") as DropDownList; 
    HiddenField hfDepartmentId = gvRow.FindControl("hfDepartmentId") as HiddenField; 

    if (ddlDepartment != null && hfDepartmentId != null) 
    { 
     ddlDepartment.SelectedValue = hfDepartmentId.Value; 
    } 
    } 
} 
+0

¡Gracias! resuelve el problema –

0

Este es el mejor que he encontrado ....

protected void GridView1_DataBound(object sender, EventArgs e) 
{ 
    foreach (GridViewRow gvRow in GridView1.Rows) 
    { 
     RadioButtonList rbl = gvRow.FindControl("rblPromptType") as RadioButtonList; 
     HiddenField hf = gvRow.FindControl("hidPromptType") as HiddenField; 

     if (rbl != null && hf != null) 
     { 
      if (hf.Value != "") 
      { 
       //clear the default selection if there is one 
       rbl.ClearSelection(); 
      } 

      rbl.SelectedValue = hf.Value; 
     } 
    } 
} 
0

Por qué está sugiriendo que ustedes utilizar bucles, cuando hay un método GridView específicamente creado para cuando cambia la condición de una fila: ¿RowDataBound()?

protected void MyGridView_RowDataBound(object sender, GridViewRowEventArgs e) 
     { 
      GridViewRow gvRow = (GridViewRow)e.Row; 
      HiddenField hfAgentID = (HiddenField)gvRow.FindControl("hfAgentID"); 
      if (hfAgentID != null) 
      { 
       if (e.Row.RowType == DataControlRowType.DataRow) 
       { 
        DropDownList ddlAgent = (DropDownList)gvRow.FindControl("ddlAgent"); 
        ddlAgent.SelectedValue = hfAgentID.Value; 
       } 
      } 
     } 
Cuestiones relacionadas