c# - template - ¿Cómo encontrar el control en editar plantilla de elemento?
visual studio create template (2)
Tengo una vista de cuadrícula en el formulario y tengo un campo de plantilla, uno de ellos es:
<asp:TemplateField HeaderText="Country" HeaderStyle-HorizontalAlign="Left">
<EditItemTemplate>
<asp:DropDownList ID="DdlCountry" runat="server" DataTextField="Country" DataValueField="Sno">
</asp:DropDownList>
</EditItemTemplate>
</asp:TemplateField>
ahora en el evento RowEditing necesito obtener el valor seleccionado de la lista desplegable del país y luego estableceré ese valor como Ddlcountry.selectedvalue = value; de modo que cuando aparezca la lista desplegable de la plantilla del elemento de edición, mostrará el valor seleccionado, no el índice 0 de la lista desplegable. pero no puedo obtener el valor de la lista desplegable. Ya he intentado esto:
int index = e.NewEditIndex;
DropDownList DdlCountry = GridView1.Rows[index].FindControl("DdlCountry") as DropDownList;
necesito ayuda por favor. Gracias.
Necesita enlazar de nuevo GridView
para poder acceder al control en EditItemTemplate
. Entonces intente esto:
int index = e.NewEditIndex;
DataBindGridView(); // this is a method which assigns the DataSource and calls GridView1.DataBind()
DropDownList DdlCountry = GridView1.Rows[index].FindControl("DdlCountry") as DropDownList;
Pero en su lugar usaría RowDataBound
para esto, de lo contrario RowDataBound
duplicando el código:
protected void gridView1_RowDataBound(object sender, GridViewEditEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
if ((e.Row.RowState & DataControlRowState.Edit) > 0)
{
DropDownList DdlCountry = (DropDownList)e.Row.FindControl("DdlCountry");
// bind DropDown manually
DdlCountry.DataSource = GetCountryDataSource();
DdlCountry.DataTextField = "country_name";
DdlCountry.DataValueField = "country_id";
DdlCountry.DataBind();
DataRowView dr = e.Row.DataItem as DataRowView;
Ddlcountry.SelectedValue = value; // you can use e.Row.DataItem to get the value
}
}
}
Puedes probar este código, basado en la EditIndex property
var DdlCountry = GridView1.Rows[GridView1.EditIndex].FindControl("DdlCountry") as DropDownList;
Enlace: http://msdn.microsoft.com/fr-fr/library/system.web.ui.webcontrols.gridview.editindex.aspx