Przepraszamy za kod wcześniej. Czy ktoś mógłby ci pomóc? Mam GridView GridView1
która jest wypełniona na PageLoad()
poprzez import z arkusza Excel, który ma trzy kolumny:Nie można uzyskać wartości z pól tekstowych w templateField wewnątrz widoku siatki
- Data
- Klienci
- PayingBookNoOrDD
Arkusz ma pięć rzędów. Użytkownicy mogą edytować dane w polach tekstowych na stronie (znaczniki poniżej). Po zakończeniu edycji, gdy użytkownik kliknie przycisk przesyłania, muszę pobrać te nowe wartości ze wszystkich pól tekstowych i zaktualizować ten sam arkusz Excel, z którego został wypełniony GridView
.
Utworzono trzy ciąg tablice: dateArray
, custArray
i payingInBookArray
do przechowywania tych nowych wartości. Ale po uruchomieniu aplikacji wszystkie trzy tablice są puste.
Markup:
<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" />
Code-tył:
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());
}
Proszę dać mi znać, jeśli ktoś ma rozwiązanie.
Dzięki.
Proszę wyczyścić przykłady kodu ... zbyt wiele, aby je edytować – CAbbott
Witam, jestem nowy na tej stronie. Próbowałem edytować pytanie, ale stało się jeszcze bardziej nieporządne. Proszę dać mi kilka minut, a ja to naprawię. – Amol
Nie wywołuj przycisków 'txtSubmit' lub niczego poprzedzającego' txt', jeśli jest to naprawdę przycisk 'btn', może to być bardzo mylące. Powinieneś również owinąć obiekt połączenia za pomocą instrukcji 'using', dzięki czemu nie musisz jawnie wywoływać' .dispose() '. – JonH