Estoy escribir el código que crear una nueva fila en gridview cuando haga clic en el botón. El número de filas que se crean valor en el cuadro de texto. Ex: Cuando entro en valor de 2 en el cuadro de texto, de dos filas se pueden añadir, pero cuando hice clic en el botón de nuevo, por tercera filas agregado aún. Por favor revisar mi código aquí:

ASPX

<asp:TextBox ID="txtVisitor" runat="server"></asp:TextBox>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
        <asp:GridView ID="Gridview1" runat="server" ShowFooter="true" AutoGenerateColumns="false">
            <Columns>
                <asp:BoundField DataField="RowNumber" HeaderText="Row Number" />
                <asp:TemplateField HeaderText="Header 1">
                    <ItemTemplate>
                        <asp:TextBox ID="txtDate" runat="server"></asp:TextBox>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Header 2">
                    <ItemTemplate>
                        <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Header 3">
                    <ItemTemplate>
                        <asp:TextBox ID="TextBox3" runat="server"></asp:TextBox>
                    </ItemTemplate>
                    <FooterStyle HorizontalAlign="Right" />
                    <FooterTemplate>
                        <asp:Button ID="ButtonAdd" runat="server" Text="Add New Row" OnClick="ButtonAdd_Click" />
                    </FooterTemplate>
                </asp:TemplateField>
            </Columns>
        </asp:GridView>
    </ContentTemplate>
</asp:UpdatePanel>

Code_Behind

protected void ButtonAdd_Click(object sender, EventArgs e)
{
int visitors = Convert.ToInt32(txtVisitor.Text);
AddNewRowToGrid(visitors);
}
private void SetInitialRow()
{
DataTable dt = new DataTable();
DataRow dr = null;
dt.Columns.Add(new DataColumn("RowNumber", typeof(string)));
dt.Columns.Add(new DataColumn("Column1", typeof(string)));
dt.Columns.Add(new DataColumn("Column2", typeof(string)));
dt.Columns.Add(new DataColumn("Column3", typeof(string)));
dr = dt.NewRow();
dr["RowNumber"] = 1;
dr["Column1"] = string.Empty;
dr["Column2"] = string.Empty;
dr["Column3"] = string.Empty;
dt.Rows.Add(dr);
//dr = dt.NewRow();
//Store the DataTable in ViewState
ViewState["CurrentTable"] = dt;
Gridview1.DataSource = dt;
Gridview1.DataBind();
}
private void AddNewRowToGrid(int visitors)
{
if (ViewState["CurrentTable"] != null)
{
DataTable dtCurrentTable = (DataTable)ViewState["CurrentTable"];
DataRow drCurrentRow;
if (dtCurrentTable.Rows.Count > 0)
{
int rowindex = 0;
for (int i = 1; i < visitors; i++)
{
//extract the TextBox values
TextBox box1 = (TextBox)Gridview1.Rows[rowindex].Cells[1].FindControl("txtDate");
TextBox box2 = (TextBox)Gridview1.Rows[rowindex].Cells[2].FindControl("TextBox2");
TextBox box3 = (TextBox)Gridview1.Rows[rowindex].Cells[3].FindControl("TextBox3");
drCurrentRow = dtCurrentTable.NewRow();
drCurrentRow["RowNumber"] = i + 1;
drCurrentRow["Column1"] = box1.Text;
drCurrentRow["Column2"] = box2.Text;
drCurrentRow["Column3"] = box3.Text;
dtCurrentTable.Rows.Add(drCurrentRow);
drCurrentRow = null;
rowindex++;
}
//add new row to DataTable
//Store the current data to ViewState
ViewState["CurrentTable"] = dtCurrentTable;
//Rebind the Grid with the current data
Gridview1.DataSource = dtCurrentTable;
Gridview1.DataBind();
}
}
else
{
Response.Write("ViewState is null");
}
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
SetInitialRow();
}
}
  • Bueno, podría por favor explicar el punto de que el cuadro de texto? Estoy ejecutando el código y si escribo en nada, pero es que 2, entonces no añade filas. La razón de esto es porque usted está tratando de encontrar los controles de cuadro de texto a través del GridView de la colección de filas y desde allí es sólo una fila en la cuadrícula para empezar, si escribe algo mayor que 2, entonces las bombas después de la primera iteración del bucle.
  • ¿Qué hay de malo en mi código. Espero que me ayuden
InformationsquelleAutor Hung PD | 2013-06-25

2 Comentarios

  1. 0

    Aquí es el problema #1 con el código:

    for (int i = dtCurrentTable.Rows.Count; i < visitors; i++)
    {
    //extract the TextBox values
    TextBox box1 = (TextBox)Gridview1.Rows[rowindex].Cells[1].FindControl("txtDate");
    TextBox box2 = (TextBox)Gridview1.Rows[rowindex].Cells[2].FindControl("TextBox2");
    TextBox box3 = (TextBox)Gridview1.Rows[rowindex].Cells[3].FindControl("TextBox3");
    drCurrentRow = dtCurrentTable.NewRow();
    drCurrentRow["RowNumber"] = i + 1;
    drCurrentRow["Column1"] = box1.Text;
    drCurrentRow["Column2"] = box2.Text;
    drCurrentRow["Column3"] = box3.Text;
    dtCurrentTable.Rows.Add(drCurrentRow);
    drCurrentRow = null;
    rowindex++;
    }

    le puse 1
    reemplazar a número de fila del gridview
    a inicio de ella

  2. 0

    Aquí es el problema #1 con el código:

    //extract the TextBox values
    TextBox box1 = (TextBox)Gridview1.Rows[rowindex].Cells[1].FindControl("txtDate");
    TextBox box2 = (TextBox)Gridview1.Rows[rowindex].Cells[2].FindControl("TextBox2");
    TextBox box3 = (TextBox)Gridview1.Rows[rowindex].Cells[3].FindControl("TextBox3");

    Esta lógica es errónea, y ni siquiera es necesario, porque cuando se unen la cuadrícula que se repite a través de la colección de la oferta como de la DataSource y el uso de la TemplateFields definido en el marcado para crear cada fila.

    Las filas no son en realidad añadido para el GridView hasta que está enlazado a un origen de datos, una DataTable en su caso, como este:

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

    El paso #1 es para quitar el FindControl líneas de su AddNewRowToGrid método.

    No estoy siquiera seguro de lo que usted está tratando de lograr en su código.

    • cuando me FindControl voy a obtener el error. Creo que FindControl es buena
    • Bueno, vamos a volver a FindControl en un minuto, pero lo que es el trato con los visitantes cuadro de texto y por qué hace que el control de cuántas veces el bucle pasa?
    • Este código funciona bien, pero ahora quiero agregar una nueva fila por especificar el valor en el cuadro de texto.
    • Buena suerte a usted, no tengo idea de lo que estás intentando hacer. Diciendo que el código funciona correctamente y, a continuación, pedir a alguien para ayudarle a solucionar es bastante contradictorio. Tratar de explicar lo que se supone que está sucediendo y lo que realmente está sucediendo, porque no puedo averiguar lo que su intención es que con esta interfaz de usuario y la lógica.
    • Sólo para hacerle saber, la manera en que su for (int i = 1; i < visitors; i++) bucle está escrito, usted tiene un por un error; en otras palabras, cuando usted escriba 2 en el cuadro de texto no es la adición de dos filas, sino porque me empieza en 1 y, a continuación, se compara a ser menor que 2 y pasa por el bucle, la siguiente iteración 2 no es menor que 2, por lo que se detiene el bucle. Esta es la razón por la que yo estoy pidiendo lo que realmente está tratando de lograr con esta lógica.
    • gracias. Voy a tratar de nuevo 🙂

Dejar respuesta

Please enter your comment!
Please enter your name here