Tengo una vista de cuadrícula en la que cada fila contiene una lista desplegable. Quiero vincular dinámicamente cada lista desplegable. ¿Puede alguien decirme cómo puedo hacerlo? Gracias de antemanocómo enlazar una lista desplegable en gridview?
Respuesta
Si está utilizando una columna de plantilla, puede vincular el menú desplegable del marcado utilizando expresiones de enlace de datos. Por ejemplo,
<asp:TemplateField HeaderText="XYZ">
<ItemTemplate>
<asp:DropDownList runat="server" ID="MyDD" DataSourceId="MyDataSource" />
</ItemTemplate>
</asp:TemplateField>
Above está asumiendo que sus datos desplegables son constantes en todas las filas. Si se está cambiando a continuación, puede utilizar la expresión de enlace de datos tales como
<asp:DropDownList runat="server" DataSource='<%# GetDropDownData(Container) %>' DataTextField="Text" DataValueField="Value" />
GetDropDownData será un método protegido en el código subyacente que devolverá los datos (tabla de datos, lista, matriz) para la fila dada.
Puede usar el evento GridView.RowDataBound (o evento RowCreated) en el código subyacente para rellenar los menús desplegables. Por ejemplo,
protected void GridView_RowDataBound(Object sender, GridViewRowEventArgs e)
{
if(e.Row.RowType == DataControlRowType.DataRow)
{
// Find the drop-down (say in 3rd column)
var dd = e.Row.Cells[2].Controls[0] as DropDownList;
if (null != dd) {
// bind it
}
/*
// In case of template fields, use FindControl
dd = e.Row.Cells[2].FindControl("MyDD") as DropDownList;
*/
}
}
Además de los métodos propuestos, es posible que también se unen a sus controles dentro de su margen de beneficio, de esta manera:
<asp:GridView ID="MyGrid" runat="server" DataSourceID="MyDataSource1">
<Columns>
<asp:TemplateField>
<EditItemTemplate>
<asp:DropDownList ID="DropDownList1" runat="server" SelectedValue='<%# Bind ("CustomerId") %>' DataSourceID="CustomersDataSource" DataTextField="CustomerName" DataValueField="CustomerId" >
</asp:DropDownList>
</EditItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
protected void gvSalesAppData_RowDataBound(Object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
DropDownList ddlCurrentPhase = (DropDownList)e.Row.FindControl("ddlCurrentPhase");
DropDownList ddlProductFamily = (DropDownList)e.Row.FindControl("ddlProductFamily");
DropDownList ddlProductGroup = (DropDownList)e.Row.FindControl("ddlProductGroup");
DropDownList ddlETProgramManager = (DropDownList)e.Row.FindControl("ddlETProgramManager");
DropDownList ddlPLMForTheProduct = (DropDownList)e.Row.FindControl("ddlPLMForTheProduct");
TrackingToolObj.BindCurrentPhases(ddlCurrentPhase);
TrackingToolObj.BindCurrentPhases(ddlProductFamily);
TrackingToolObj.BindProductGroups(ddlProductGroup);
TrackingToolObj.GetEmployeesBasedOnRoleTypeId(ddlETProgramManager, (int)OSAEnums.RoleTypes.ProgramManager, false);
TrackingToolObj.GetEmployeesBasedOnRoleTypeId(ddlPLMForTheProduct, (int)OSAEnums.RoleTypes.PLM, false);
}
}
Encuadernación GridView
A continuación se el código para enlazar el control GridView con datos.
C#
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
this.BindData();
}
}
private void BindData()
{
string query = "SELECT top 10 * FROM Customers";
SqlCommand cmd = new SqlCommand(query);
gvCustomers.DataSource = GetData(cmd);
gvCustomers.DataBind();
}
private DataTable GetData(SqlCommand cmd)
{
string strConnString = ConfigurationManager.ConnectionStrings["conString"].ConnectionString;
using (SqlConnection con = new SqlConnection(strConnString))
{
using (SqlDataAdapter sda = new SqlDataAdapter())
{
cmd.Connection = con;
sda.SelectCommand = cmd;
using (DataTable dt = new DataTable())
{
sda.Fill(dt);
return dt;
}
}
}
}
por favor edite su respuesta y formatee el código para que sea legible – kleopatra
Para ser honesto, esa es una forma tonta de hacerlo. Si tiene 500 filas en una vista de cuadrícula, ¿consultará una base de datos 500 veces? Cuando tengo que hacer esto, llené un conjunto de datos con los datos de los elementos en la lista desplegable y, como se muestra arriba, en el evento RowDataBound, vinculo el conjunto de datos a las listas desplegables. –
Aquí es su gridview
<asp:GridView ID="grvExcelData" runat="server" onrowdatabound="GridView2_RowDataBound">
<HeaderStyle BackColor="#df5015" Font-Bold="true" ForeColor="White" />
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:DropDownList ID="DrdDatabase" Width="100px" runat="server">
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
y su evento RowDataBound
para el gridview habría
protected void GridView2_RowDataBound(object sender, GridViewRowEventArgs e)
{
string cities = "maxico,chennai,newdelhi,hongkong";
string [] arr = cities.Split(',');
// Instead of string array it could be your data retrieved from database.
if (e.Row.RowType == DataControlRowType.DataRow)
{
DropDownList ddl = (DropDownList)e.Row.FindControl("DrdDatabase");
foreach (string colName in arr)
ddl.Items.Add(new ListItem(colName));
}
}
Esto no parece que esto esté vinculado a una base de datos, sino que se adjunta a una matriz de ciudades. Si un usuario realiza un cambio en el menú desplegable, ¿cómo actualizará la base de datos? –
- 1. ¿Enlazar una lista desplegable en mvc3 a un diccionario?
- 2. Cómo enlazar DropDownList en Gridview con datos NOT desde gridview
- 3. Enlazar lista desplegable a la lista desplegable para ver detalles ASP.NET C#
- 4. Cómo enlazar gridview usando linq/Entity Framework?
- 5. ¿Cómo usar iconos en una lista desplegable?
- 6. ¿Es posible enlazar un asp: GridView a una lista <T>?
- 7. Enlazar un control GridView ASP.NET a una matriz de cadenas
- 8. lista desplegable en rieles
- 9. gridview lista desplegable se unen a la lista <KeyValuePair <int, string>>
- 10. validar una lista desplegable en asp.net mvc
- 11. Enlazar lista de seguridad (lista) en .net
- 12. Cómo filtrar las opciones de una lista desplegable usando otra lista desplegable
- 13. extraño problema al enlazar una lista dinámica
- 14. Cómo filtrar una lista desplegable en el administrador de Django cuando se realiza una selección en otra lista desplegable
- 15. Error en la lista desplegable
- 16. ASP.NET MVC - Complete una lista desplegable
- 17. ¿Cómo puedo crear una lista desplegable editable en HTML?
- 18. ¿Cómo se envía una lista desplegable en asp.net mvc
- 19. ¿Cómo llenar una lista desplegable con datos json en jquery?
- 20. ¿Cómo crear una lista desplegable sin usar UIPIckerviewcontroller en iPhone?
- 21. Cómo enlazar la lista a dataGridView?
- 22. onchange en la lista desplegable
- 23. C# - Dumping una lista a una lista desplegable
- 24. ¿Cómo agrego una opción a una lista desplegable usando jQuery?
- 25. Cómo filtrar los valores de la lista desplegable por otra lista desplegable en ASP.NET, C#
- 26. cómo enlazar una lista a un combobox? (Windows Forms)
- 27. Parte en negrita de una opción en una lista desplegable
- 28. Imágenes en la lista desplegable
- 29. ¿Es posible enlazar una Lista a un ListView en WinForms?
- 30. Vista de lista desplegable
¿Qué pasa con el caso RowCreated? ¿Hubiera una razón para preferir uno sobre el otro? – Tim
@Tim, RowCreated también funcionará. Sin embargo, creo que si estás enlazando la cuadrícula solo la primera vez (y no en la posterior), 'RowCreated' ciertamente se activará en cada post-back pero no en 'RowDataBound' (no estoy 100% seguro aquí). Entonces, en tal caso, podemos confiar en view-state para completar el menú desplegable. Personalmente, prefiero la ruta de marcado. – VinayC
Se supone que tiene su instancia SQL declarada en su código. Si ya vinculó su vista de cuadrícula en su código, entonces debe haber una solución diferente, porque no podría usar DataSourceId = "MyDataSource" –