2011-10-06 8 views
5

Daha önce kodla ilgili sorunum yok. Biri yardım edebilir mi?Gri ​​görünümde, şablon görünümündeki metin kutularındaki değerler alınamıyor

  1. tarihi
  2. Müşteriler
  3. PayingBookNoOrDD

levha beş satır var: Üç sütun vardır Excel sayfasındaki ithal ederek PageLoad() üzerinde doldurulan bir GRIDVIEW GridView1 var. Kullanıcılar, verileri sayfadaki metin kutularında düzenleyebilir (aşağıdaki işaret). Düzenlemeden sonra, kullanıcı gönder düğmesini tıkladığında, bu yeni değerleri tüm metin kutularından almalı ve GridView'un bulunduğu yerden aynı Excel sayfasını güncellemeliyim.

Üç yeni dizi oluşturdum: dateArray, custArray ve payingInBookArray bu yeni değerleri depolamak için. Ama uygulamayı çalıştırdığımda üç dizinin tamamı boş.

Biçimlendirme:

<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" /> 

kod arkadaki:

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()); 

} 

herkes bir çözüm varsa lütfen bana bildirin.

Teşekkürler.

+0

temizlemek-up – CAbbott

+0

Merhaba CAbbott düzenlemek için çok fazla kod örnekleri ... Üzgünüm bu siteye yeniyim edin. Soruyu düzenlemeye çalıştım ama daha da karmaşıklaştı. Lütfen bana birkaç dakika ver ve düzelteceğim. – Amol

+0

"txtSubmit" düğmelerini veya gerçekten bir düğme "btn" ise, bir txt'yi önceleyen bir şey çağırmayın, bu çok yanıltıcı olabilir. Bağlantı nesnesini 'using' deyimini kullanarak da sarmalısınız, bu şekilde' .dispose() 'i çağırmak zorunda kalmayacaksınız. – JonH

cevap

0

Page_Load olayınıza bir geri gönderme denetimi ekleyin. Btn_Submit kodunuzda yanlış bir şey göremiyorum.

protected void Page_Load(object sender, EventArgs e) 
{ 
    if(!this.IsPostBack){ 
     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(); 
    } 
} 
0

Şahsen ben bu şekilde txtSubmit_Click işlevini değiştirecek:

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.FindControl("txtDate"); 
     DateArray.Add(lblDate.Text); 

     TextBox lblCustomers = (TextBox)gr.FindControl("txtCustomers"); 
     custArray.Add(lblCustomers.Text); 

     TextBox lblPayInBookNo = (TextBox)gr.FindControl("txtPayingInBookNoOrDD"); 
     payInBookArray.Add(lblPayInBookNo.Text); 
    } 

    ExportToExcel(DateArray.ToArray(), custArray.ToArray(), payInBookArray.ToArray()); 

} 

Hep doğrudan .Cells koleksiyonunda değerlerini erişmeye çalışan sorunları yaşadım. Satırda .FindControl'u aradığınızda ne olur?

Diğerlerinin söylediğine göre, HTML alanlarınız ve değişkenleriniz için yeni adlar düşünmeye değer. DateArray türünde IList türüne sahip olmak artık önemsiz gibi görünüyor, ancak kısa bir süre DateArray.ToArray()'u görmek için bir döngü attı. Adlandırma kuralları ve diğer küçük kaynak kodu değişiklikleri, şimdi düzeltmek için çok fazla zaman almayacaktır, ancak bu kodu başka projeler üzerinde çalışmaktan haftalar veya aylar sonra tekrar gözden geçirmeniz gerektiğinde size zaman kazandırır.

0
Protected Sub txtNombres_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) 
     Session("FiltroNombres") = DirectCast(sender, TextBox).Text 

End Sub 
İlgili konular