Disculpa el código anterior. ¿Alguien podría ayudar? Tengo un gridview GridView1
que está poblada en PageLoad()
mediante la importación de hoja de cálculo de Excel que tiene tres columnas:No se pueden obtener los valores de los cuadros de texto en templateField dentro de gridview
- Fecha
- clientes
- PayingBookNoOrDD
La hoja tiene cinco filas. Los usuarios pueden editar los datos en cuadros de texto en la página (marcado a continuación). Después de la edición, cuando el usuario hace clic en el botón Enviar, necesito obtener estos nuevos valores de todos los cuadros de texto y actualizar la misma hoja de Excel desde donde se llenó el GridView
.
Creé tres matrices de cadenas: dateArray
, custArray
y payingInBookArray
para almacenar estos valores nuevos. Pero cuando ejecuto la aplicación, las tres matrices están vacías.
de marcado:
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" DataKeyNames="Date,Customers,PayingInBookNoOrDD" >
<Columns>
<asp:TemplateField>
<HeaderTemplate>Date</HeaderTemplate>
<ItemTemplate>
<asp:TextBox runat="server" ID="txtDate" Text='<%# Bind("Date") %>'></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<HeaderTemplate>Customers</HeaderTemplate>
<ItemTemplate>
<asp:TextBox runat="server" ID="txtCustomers" Text='<%# Bind("Customers") %>'></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<HeaderTemplate>PayingInBookNoOrDD</HeaderTemplate>
<ItemTemplate>
<asp:TextBox runat="server" ID="txtPayingInBookNoOrDD" Text='<%# Bind("PayingInBookNoOrDD") %>'></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:Button ID="txtSubmit" runat="server" Text="Submit" onclick="txtSubmit_Click" />
de código subyacente:
protected void Page_Load(object sender, EventArgs e)
{
string selectQuery = "SELECT * FROM [Month1$B2:D5]";
OleDbConnection conn = new OleDbConnection(connString);
conn.Open();
OleDbDataAdapter da = new OleDbDataAdapter(selectQuery, conn);
DataSet ds = new DataSet();
da.Fill(ds);
GridView1.DataSource = ds;
GridView1.DataBind();
conn.Close();
da.Dispose();
conn.Dispose();
}
protected void txtSubmit_Click(object sender, EventArgs e)
{
IList<string> DateArray = new List<string>();
IList<string> custArray = new List<string>();
IList<string> payInBookArray = new List<string>();
foreach (GridViewRow gr in GridView1.Rows)
{
TextBox lblDate = (TextBox)gr.Cells[0].FindControl("txtDate");
DateArray.Add(lblDate.Text);
TextBox lblCustomers = (TextBox)gr.Cells[1].FindControl("txtCustomers");
custArray.Add(lblCustomers.Text);
TextBox lblPayInBookNo = (TextBox)gr.Cells[2].FindControl("txtPayingInBookNoOrDD");
payInBookArray.Add(lblPayInBookNo.Text);
}
ExportToExcel(DateArray.ToArray(), custArray.ToArray(), payInBookArray.ToArray());
}
Por favor, hágamelo saber si alguien tiene una solución.
Gracias.
Por favor, limpie sus ejemplos de código ... demasiado para editar – CAbbott
Hola CAbbott, lo siento, soy nuevo en este sitio. Traté de editar la pregunta pero se volvió aún más desordenado. Por favor, dame unos minutos y lo arreglaré. – Amol
No llames a tus botones 'txtSubmit' o cualquier cosa que sea anterior a' txt' si realmente es un botón 'btn', puede ser muy engañoso. También debe envolver su objeto de conexión utilizando la instrucción 'using', de esa manera no tiene que llamar' .dispose() 'explícitamente. – JonH