none
Recuperar texto de un TextBox de un ItemTemplate de un GridView RRS feed

  • Pregunta

  • Buenas tardes, escribo porque tengo un problema un poco raro... 

    El caso es que tengo dos GridViews. En uno aparece información sin más, y en el otro aparece la misma información, pero editable para que el usuario pueda cambiarla. 

    Para llenar la información del GridView que sólo muestra la información utilizo DataBind(), mientras que para colocar la información editable en el GridView que sirve para que el usuario cambie la información lo hago paso por paso. 

    Os dejo el código del GridView editable a continuación:

    <asp:GridView ID="GridViewFillOrderedPart" 
                    SkinID="GV" 
                    runat="server" 
                    AllowSorting="False"
                    AutoGenerateColumns="False"
                    DataKeyNames="id_DRP" 
                    DataSourceID="ODS2"
                    Style="margin-top: 0px; text-align: center; margin-top: 10px; border: 1px solid #e5e8e8;" Wrap="false" Visible="False" Width="90%" CellPadding="5" EnableModelValidation="True">
                    <AlternatingRowStyle Wrap="True" />
                    <Columns>
                        <asp:TemplateField HeaderText="WH" SortExpression="wh" Visible="true" ItemStyle-CssClass="DV_detailed_review_pareto_SDT_right_fillInventory" ItemStyle-Wrap="false" ItemStyle-Width="44px">
                            <ItemTemplate>
                                <asp:Label ID="lb_wh_fill" runat="server"  Style="text-align: center;" Text="" Visible="true"></asp:Label>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="SLS WH Code" SortExpression="SLS_wh_code" Visible="true" ItemStyle-CssClass="DV_detailed_review_pareto_SDT_right_fillInventory" ItemStyle-Wrap="false" ItemStyle-Width="118px">
                            <ItemTemplate>
                                <asp:Label ID="lb_SLS_wh_code_fill" runat="server"  Style="text-align: center;" Text="" Visible="true"></asp:Label>
                            </ItemTemplate>
                            <ItemStyle CssClass="DV_detailed_review_pareto_SDT_right_fillInventory" />
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="SAP WH Code" SortExpression="SAP_wh_code" Visible="true" ItemStyle-CssClass="DV_detailed_review_pareto_SDT_right_editable_fillInventory" ItemStyle-Wrap="false" ItemStyle-Width="125px">
                          <ItemTemplate>
                              <asp:DropDownList ID="DDL_SAPCode" class="edit_ddlist" runat="server" DataSourceID="ODSSAPCode"
                                    DataTextField="SAP WH code" DataValueField="SAP WH code" AutoPostBack="true" AppendDataBoundItems="true" OnSelectedIndexChanged="select_SAPCode">
                                  <asp:ListItem Value=""></asp:ListItem>  
                              </asp:DropDownList>
                              </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="WH Name" SortExpression="wh_name" Visible="true" ItemStyle-CssClass="DV_detailed_review_pareto_SDT_right_fillInventory" ItemStyle-Wrap="false" ItemStyle-Width="160px">
                            <ItemTemplate>
                                <asp:Label ID="lb_wh_name_fill" runat="server"  Style="text-align: center;" Text="" Visible="true"></asp:Label>
                            </ItemTemplate>
                            <ItemStyle CssClass="DV_detailed_review_pareto_SDT_right_fillInventory" />
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Part Number" SortExpression="part_number" Visible="true" ItemStyle-CssClass="DV_detailed_review_pareto_SDT_right_editable_fillInventory" ItemStyle-Wrap="false" ItemStyle-Width="115px">
                            <ItemTemplate>
                                <asp:TextBox ID="TB_part_number_fill" runat="server" class="edit_textbox" Style="text-align: center;" Text="" Visible="true"></asp:TextBox>
                            </ItemTemplate>
                            <ItemStyle CssClass="DV_detailed_review_pareto_SDT_right_editable_fillInventory" />
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Pre-selected Licence Plate" SortExpression="pre_selected_LP" Visible="true" ItemStyle-CssClass="DV_detailed_review_pareto_SDT_right_editable_fillInventory" ItemStyle-Wrap="false" ItemStyle-Width="115px">
                            <ItemTemplate>
                                <asp:TextBox ID="TB_pre_LP_fill" runat="server" class="edit_textbox" Style="text-align: center;" Text="" Visible="true"></asp:TextBox>
                            </ItemTemplate>
                            <ItemStyle CssClass="DV_detailed_review_pareto_SDT_right_editable_fillInventory" />
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Shipped Licence Plate" SortExpression="shipped_LP" Visible="true" ItemStyle-CssClass="DV_detailed_review_pareto_SDT_right_fillInventory">
                            <ItemTemplate>
                                <%--<asp:TextBox ID="TB_shipped_LP_fill" runat="server" class="edit_textbox" Style="text-align: center;" Text="" Visible="true"></asp:TextBox>--%>
                                <asp:Label ID="lb_shipped_LP_fill" runat="server"  Style="text-align: center;" Text="" Visible="true"></asp:Label>
                            </ItemTemplate>
                            <ItemStyle CssClass="DV_detailed_review_pareto_SDT_right_fillInventory" />
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Binlocation" SortExpression="binlocation" Visible="true" ItemStyle-CssClass="DV_detailed_review_pareto_SDT_right_editable" ItemStyle-Wrap="false" ItemStyle-Width="100px">
                            <ItemTemplate>
                                <asp:TextBox ID="TB_binlocation_fill" runat="server" class="edit_textbox" Style="text-align: center;" Text="" Visible="true"></asp:TextBox>
                            </ItemTemplate>
                            <ItemStyle CssClass="DV_detailed_review_pareto_SDT_right_editable" />
                        </asp:TemplateField>
                    </Columns>
                    <EditRowStyle Wrap="False" />
                    <EmptyDataRowStyle Wrap="False" />
                    <HeaderStyle Wrap="False" />
                </asp:GridView>


    El código C# que rellena el GridView (éste sólo tendrá una fila):

    ((Label)GridViewFillOrderedPart.Rows[0].FindControl("lb_wh_fill")).Text = drp.getDRP_OrderByid_DRP((int)Session["id_DRP"]).Rows[0]["wh"].ToString();
                ((Label)GridViewFillOrderedPart.Rows[0].FindControl("lb_SLS_wh_code_fill")).Text = drp.getDRP_OrderByid_DRP((int)Session["id_DRP"]).Rows[0]["SLS_wh_code"].ToString();
                ((DropDownList)GridViewFillOrderedPart.Rows[0].FindControl("DDL_SAPCode")).SelectedValue = drp.getDRP_OrderByid_DRP((int)Session["id_DRP"]).Rows[0]["SAP_wh_code"].ToString();
                ((Label)GridViewFillOrderedPart.Rows[0].FindControl("lb_wh_name_fill")).Text = drp.getDRP_OrderByid_DRP((int)Session["id_DRP"]).Rows[0]["wh_name"].ToString();
                ((TextBox)GridViewFillOrderedPart.Rows[0].FindControl("TB_part_number_fill")).Text = drp.getDRP_OrderByid_DRP((int)Session["id_DRP"]).Rows[0]["part_number"].ToString();
                ((TextBox)GridViewFillOrderedPart.Rows[0].FindControl("TB_pre_LP_fill")).Text = drp.getDRP_OrderByid_DRP((int)Session["id_DRP"]).Rows[0]["pre_selected_LP"].ToString();
                ((Label)GridViewFillOrderedPart.Rows[0].FindControl("lb_shipped_LP_fill")).Text = drp.getDRP_OrderByid_DRP((int)Session["id_DRP"]).Rows[0]["shipped_LP"].ToString();
                ((TextBox)GridViewFillOrderedPart.Rows[0].FindControl("TB_binlocation_fill")).Text = drp.getDRP_OrderByid_DRP((int)Session["id_DRP"]).Rows[0]["Binlocation"].ToString();
                


    El código C# que recupera la información rellenada:

    newsap_wh_code = ((DropDownList)GridViewFillOrderedPart.Rows[0].FindControl("DDL_SAPCode")).SelectedValue.ToString();
                            newwh = (wh_info.getWhInfoBySAPCode(newsap_wh_code).Rows[0]["WH"]).ToString();
                            newsls_wh_code = (wh_info.getWhInfoBySAPCode(newsap_wh_code).Rows[0]["SLS WH code"]).ToString();
                            newwh_name = (wh_info.getWhInfoBySAPCode(newsap_wh_code).Rows[0]["WH name"]).ToString();
                            newpart_number = ((TextBox)GridViewFillOrderedPart.Rows[0].FindControl("TB_part_number_fill")).Text.ToString();
                            newpre_lp = ((TextBox)GridViewFillOrderedPart.Rows[0].FindControl("TB_pre_LP_fill")).Text.ToString();
                            newshipped_lp = ((Label)GridViewFillOrderedPart.Rows[0].FindControl("lb_shipped_LP_fill")).Text.ToString();
                            newbin_location = ((TextBox)GridViewFillOrderedPart.Rows[0].FindControl("TB_binlocation_fill")).Text.ToString();

    El problema está justo en esta última parte: cuando se intenta recuperar la información aparece el error: "There is no row at position 0". He probado a cambiar el índice de la fila a 1, pero entonces sale Out of Range (normal, sólo hay 1 fila: índice 0). 

    ¿Qué puedo hacer para arreglar esto?

    lunes, 28 de septiembre de 2015 14:10

Todas las respuestas

  • hola

    pero ese codigo que defines en c# en que contexto lo defines ? o sea en que evento

    porque si es en el RowCommand o el SelectedIndexChanged, etc estos eventos tienen el e.RowIndex para poder tomar la row que lanza la accion

    o sea dejar fijo la row cero no es correcto

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 28 de septiembre de 2015 14:30
  • Hola, 

    muchas gracias por la respuesta. 

    Este código C# está definido en el método que establece qué tiene que hacerse cuando se pulsa un botón.

    Saludos!

    lunes, 28 de septiembre de 2015 14:33
  • hola

    ok pero en la accion del boton como determinar entre todas las rows cual es la que esta seleccionado o en edicion ?

    si fijas la row cero siempre trabajaras con la primer row y al resto como accedes ?

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 28 de septiembre de 2015 14:58
  • Sólo quiero acceder a la row 0. Igual que escribo en la row 0, sólo quiero rescatar la información de la row 0. 
    El problema está en que me dice "There is no row at position 0".

    Saludos!

    lunes, 28 de septiembre de 2015 14:59