¿Cómo obtengo TextBox en una fila de GridView cuando se hace clic en el botón Editar si los encabezados no están vinculados a datos?

Tengo un GridViewy los campos de encabezado del GridView son los elementos de un ListBox en mi programa Por lo tanto, la cantidad de columnas generadas es dinámica cada vez que ejecuto. Basado en esto, si hago clic en el botón Editar asociado dentro de mi GridView, ¿cómo genero un TextBox para cada celda de esa fila?

El código .cs que he escrito es:

protected void DONE4_Click(object sender, EventArgs e)
{
    Panel7.Visible = true;

    SqlDataAdapter mydat = new SqlDataAdapter("SELECT DISTINCT Profile_Instance FROM Profile_Master", con);
    DataSet dst = new DataSet();
    mydat.Fill(dst, "Table");
    ListBox3.Items.Clear();
    ListBox3.DataSource = dst.Tables[0];
    ListBox3.DataTextField = dst.Tables[0].Columns["Profile_Instance"].ColumnName;
    ListBox3.DataBind();

    int count = ListBox3.Items.Count;

    DataTable dt = new DataTable();
    DataRow rw = default(DataRow);
    for (int i = 0; i < ListBox1.Items.Count; i++)
    {
        dt.Columns.Add(ListBox1.Items[i].ToString(),
                                       System.Type.GetType("System.String"));
    }

    for (int j = 0; j < count; j++)
    {
        rw = dt.NewRow();
        for (int i = 0; i < ListBox1.Items.Count; i++)
        {
            rw[ListBox1.Items[i].ToString()] = " ";
        }
        dt.Rows.Add(rw);
    }

    GridView2.DataSource = dt;
    GridView2.DataBind();

    foreach (GridViewRow grdRow in GridView2.Rows)
    {
        DropDownList bind_dropdownlist = new DropDownList();                                                    // defining the property of the DropDownList as bind_dropdownlist
        bind_dropdownlist = (DropDownList)(GridView2.Rows[grdRow.RowIndex].Cells[0].FindControl("Pro_List"));   // finding the  DropDownList from the gridiew for binding
        SqlDataAdapter mydata = new SqlDataAdapter("SELECT DISTINCT Profile_Instance FROM Profile_Master", con);
        DataSet dset = new DataSet();                                                                           // binding the DropDownList with the dataset ds
        mydata.Fill(dset, "Table");
        bind_dropdownlist.DataSource = dset;
        bind_dropdownlist.DataTextField = "Profile_Instance";                                                   // set the DropDownList's DataTextField as designation which display the designation in the dropdownlist after fetching the data from database
        bind_dropdownlist.DataBind();
        bind_dropdownlist.Items.Insert(0, new ListItem("---Choose Profile---", "-1"));
    }
}

El código de diseño de la GridView es:

<asp:Panel ID="Panel7" runat="server">
    <asp:GridView ID="GridView2" runat="server" CellPadding="4"
        style="text-align: center; font-size: small" BackColor="White" 
        BorderColor="#CC9966" BorderStyle="None" BorderWidth="1px">

        <Columns>                
        <asp:TemplateField HeaderText="">
            <ItemTemplate>
                <asp:DropDownList ID="Pro_List" runat="server">
                    <asp:ListItem>--Select--</asp:ListItem>                          
                </asp:DropDownList>
            </ItemTemplate>
        </asp:TemplateField>

        <asp:CommandField ShowEditButton="True" />

        </Columns>
    </asp:GridView>
</asp:Panel>

¿Alguien puede ayudarme con esto? Espero que la pregunta sea clara.

preguntado el 25 de agosto de 12 a las 07:08

1 Respuestas

Si no es vinculante GridView y aún desea acceder a los controles dentro de él, puede usar el GridViewRow propiedad.

protected void grd_RowEditing(object sender, GridViewEditEventArgs e) 
{
     GridViewRow selectRow = grd.Rows[e.NewEditIndex];
     TextBox txtKj=(TextBox)selectRow.Cells[3].FindControl("txtKjId"); 
}

Respondido el 18 de enero de 17 a las 08:01

Esto me está dando un error: el miembro no invocable 'System.Web.UI.WebControls.GridView.Rows' no se puede usar como un método. - Archana BR

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.