2011-10-06 18 views
5

के अंदर फ़ील्ड पहले कोड के बारे में खेद है। क्या कोई मदद कर सकता है?टेम्पलेट में टेक्स्टबॉक्स से मूल्य नहीं प्राप्त कर सकते हैं ग्रिडव्यू

  1. दिनांक
  2. ग्राहकों
  3. PayingBookNoOrDD

चादर पांच पंक्तियां हैं: मैं एक gridview GridView1 जो एक्सेल शीट कि तीन कॉलम है से आयात करके PageLoad() पर बसा है। उपयोगकर्ता पृष्ठ पर टेक्स्टबॉक्स में डेटा संपादित कर सकते हैं (नीचे मार्कअप)। संपादन के बाद, जब उपयोगकर्ता सबमिट बटन पर क्लिक करता है, तो मुझे इन नए मानों को सभी टेक्स्टबॉक्स से प्राप्त करना होगा और उसी एक्सेल शीट को अपडेट करना होगा जहां से GridView पॉप्युलेट किया गया था।

मैंने इन नए मानों को स्टोर करने के लिए तीन स्ट्रिंग एरे: dateArray, custArray, और payingInBookArray बनाया। लेकिन जब मैं एप्लिकेशन चलाता हूं तो सभी तीन सरणी खाली होती हैं।

मार्कअप:

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

कोड-पीछे:

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

} 

कृपया मुझे बताएं कि किसी को भी एक समाधान है करते हैं।

धन्यवाद।

+0

कृपया साफ-अप अपने कोड उदाहरण ... जिस तरह से भी संपादित करने के लिए – CAbbott

+0

हाय CAbbott ज्यादा, माफ करना, मैं नई इस साइट के लिए कर रहा हूँ। मैंने सवाल संपादित करने की कोशिश की लेकिन यह और भी गड़बड़ हो गया। कृपया मुझे कुछ मिनट दें और मैं इसे ठीक कर दूंगा। – Amol

+0

अपने बटन 'txtSubmit' या' txt' को prefacing करने वाले किसी भी चीज़ को कॉल न करें अगर यह वास्तव में एक बटन 'बीटीएन' है, तो यह बहुत भ्रामक हो सकता है। आपको 'उपयोग' कथन का उपयोग करके अपनी कनेक्शन ऑब्जेक्ट को भी लपेटना चाहिए, इस तरह आपको स्पष्ट रूप से 'डिस्प्ले()' को कॉल करने की आवश्यकता नहीं है। – JonH

उत्तर

0

अपने पेज_लोड ईवेंट पर एक पोस्टबैक चेक जोड़ें। मैं आपके btn_Submit कोड के साथ कुछ भी गलत नहीं देख सकता।

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

व्यक्तिगत रूप से, मैं इस के लिए अपने txtSubmit_Click समारोह बदल जाएगा:

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

} 

मैं हमेशा सीधे .Cells संग्रह में मानों का उपयोग करने की कोशिश कर समस्याओं था। क्या होता है जब आप पंक्ति पर .FindControl पर कॉल करते हैं?

जैसा कि अन्य ने कहा है, यह आपके HTML फ़ील्ड और आपके चर के लिए नए नामों के बारे में सोचने लायक है। IList प्रकार के DateArray होने के लिए अब यह छोटा लगता है, लेकिन यह DateArray.ToArray() देखने के लिए मुझे एक लूप के लिए संक्षेप में फेंक दिया। नामकरण सम्मेलन और अन्य छोटे स्रोत कोड परिवर्तन आपको अभी ठीक करने में बहुत समय नहीं लगेगा, लेकिन आपको बाद में बहुत समय बचाएगा जब आपको अन्य परियोजनाओं पर काम करने के हफ्तों या महीनों के बाद इस कोड पर फिर से जाना होगा।

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

End Sub