c#
  • asp.net
  • excel
  • gridview
  • templatefield
  • 2012-12-10 24 views 6 likes 
    6

    यह ग्रिड व्यू का मेरा मार्कअप है।ग्रिड व्यू में टेम्पलेट फ़ील्ड से मूल्य कैसे प्राप्त करें?

    <Columns> 
        <asp:TemplateField HeaderText="Customer Name"> 
         <ItemTemplate> 
          <asp:Label ID="lblname" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "Customer.Name")%>'></asp:Label> 
         </ItemTemplate> 
        </asp:TemplateField> 
        <asp:TemplateField HeaderText="PickUpPoint"> 
         <ItemTemplate> 
          <asp:Label ID="lblPickUpPoint" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "Pickuppoint")%>'></asp:Label> 
         </ItemTemplate> 
        </asp:TemplateField> 
    </Columns> 
    

    मेरे पास एक बटन है जो एक्सेल ऑब्जेक्ट की वर्कशीट कोशिकाओं में मानों को संग्रहीत करता है।

    for (int i = 0; i < GridView2.Rows.Count; i++) 
    { 
        for (int j = 0; j < GridView2.Rows[i].Cells.Count; j++) 
        { 
         xlWorkSheet.Cells[i + 1, j + 1] = GridView2.Rows[i].Cells[j].Text; 
        } 
    } 
    

    कैसे के रूप में GridView2.Rows[i].Cells[j] .text रिक्त स्ट्रिंग रिटर्न मैं GridView के मूल्यों को प्राप्त और एक वर्कशीट में संग्रहीत है,।

    उत्तर

    7

    आपका एक प्रकार डाली याद कर रहे हैं। इस-

    Label name = (Label)GridView2.Rows[i].Cells[j].FindControl("lblname"); 
    xlWorkSheet.Cells[i + 1, j + 1] = name.Text; 
    

    Update- है जैसे कि यह क्या आप, Label0 और Label1 के रूप में अपने लेबल नाम कर सकते हैं तो हैडर के लिए के लिए loop-

    for (int j = 0; j < GridView2.Rows[i].Cells.Count; j++) 
        { 
        Label xyz = (Label)GridView2.Rows[i].Cells[j].FindControl("Label"+j); 
        xlWorkSheet.Cells[i + 1, j + 1] = xyz.Text; 
        } 
    

    दूसरे में पाठ string hText = GridView2.HeaderRow.Cells[your column number].Text;

    +0

    ठीक है ... लेकिन, इसे कैसे करें अन्य नियंत्रणों के लिए ... यदि लूप दूसरे tym में प्रवेश करता है ... मैं लेबल को 'lblPickUpPoint' पर कैसे इंगित कर सकता हूं .... धन्यवाद – Kulkarni

    +0

    एक आकर्षक आदमी की तरह काम करता है .... धन्यवाद ...... संपादित करें: अब मुझे ग्रिडव्यू के अंदर सभी डेटा मिल रहा है .. मैं 'टेम्पलेटफिल्ड हैडरटेक्स्ट' वर्कशीट के अंदर भी कैसे प्राप्त कर सकता हूं ... ??? अग्रिम धन्यवाद ... – Kulkarni

    +0

    मैं वर्कशीट के अंदर 'टेम्पलेटफिल्ड हैडरटेक्स्ट' कैसे प्राप्त कर सकता हूं ... ?? – Kulkarni

    3

    मूल्यों को पुन: प्राप्त करने के लिए ऐसा करते हैं:

    for (int i = 0; i < GridView2.Rows.Count; i++) 
    { 
        //extract the TextBox values 
        Label lblname= (Label)GridView2.Rows[i].Cells[0].FindControl("lblname"); 
        Label lblPickUpPoint= (Label)GridView2.Rows[i].Cells[0].FindControl("lblPickUpPoint"); 
        //Do your excel binding here 
    } 
    
    +0

    मैं फ़ील्ड से मान, मैं कैसे यह वर्कशीट ... के रूप में 'xlWorkSheet.Cells बाँध चाहिए गया [i + 1, जे + 1] = ग्रिड व्यू 2। पंक्तियां [i] .ल्स [जे]। टेक्स्ट; ' मुझे क्या करने की ज़रूरत है, अगर मुझे उन्हें क्रम में रखने की आवश्यकता है ... संपादित करें: क्या मुझे दूसरी आवश्यकता है पाश के लिए..??? – Kulkarni

    +1

    यदि आप एक्सेल करने के लिए लाइन से लाइन लिखना चाहते हैं तो इसे आज़माएं: http: //www.clear-lines.com/blog/post/Write-data-to-an-Excel-worksheet-with-C-fast.aspx यदि आप पूर्ण ग्रिडव्यू निर्यात चाहते हैं तो इसे आजमाएं: http: //www.codeproject.com/Tips/477436/Export-Gridview-Data-to-Excel-in-ASP-NET – sajanyamaha

    0

    {cell}.Text केवल तभी काम करेगा यदि TemplateField के भीतर कोई नियंत्रण नहीं है। आपने अपने टेम्पलेट में एक लेबल जोड़ा है, यही कारण है कि आपको पहले नियंत्रण ढूंढने की आवश्यकता है, अपनी ऑब्जेक्ट को नियंत्रण में डालें और आवश्यकतानुसार नियंत्रण के गुणों तक पहुंचें।

    आप एक अधिक सामान्य दृष्टिकोण आप हमेशा निम्न कर सकता है चाहते हैं (लेबल नियंत्रण हटाने और बस का मूल्यांकन क्षेत्र को जोड़ने):

    <Columns> 
        <asp:TemplateField HeaderText="Customer Name"> 
         <ItemTemplate> 
          <%# DataBinder.Eval(Container.DataItem, "Customer.Name")%> 
         </ItemTemplate> 
        </asp:TemplateField> 
        <asp:TemplateField HeaderText="PickUpPoint"> 
         <ItemTemplate> 
          <%# DataBinder.Eval(Container.DataItem, "Pickuppoint")%> 
         </ItemTemplate> 
        </asp:TemplateField> 
    </Columns> 
    

    आप कोड आप शुरू में इस्तेमाल किया, का उपयोग करते हैं {cell}.Text नहीं होना चाहिए अब खाली वापसी।

    +0

    माफ़ी, मैं शपथ ले सकता था कि एक मंच पर काम किया लेकिन मुझे बहुत गलत होना चाहिए। मुझे लगता है कि यदि आप अपने डेटा के साथ कुछ भी कस्टम नहीं करने जा रहे हैं तो बाउंडफ़िल्ल्ड का उपयोग करना सबसे अच्छा शर्त है। अन्यथा आप '((लेबल) gvTest.Rows [i] का उपयोग कर सकते हैं। कंस [जे]। नियंत्रण [1])। पाठ 'मेरे ज्ञान का सबसे अच्छा, लेबल नियंत्रण हमेशा इंडेक्स 1 पर होगा, मान लें कि आपके पास कोई अतिरिक्त नहीं है लेबल से पहले आपके टेम्पलेट में जोड़े गए नियंत्रण। – cbillowes

    -1

    उपयोग इस प्रकार के "बटन btnledName = (बटन) इस," यह करेंगे, लेकिन आप शून्य btnledName_Click (वस्तु प्रेषक, EventArgs ई) {

    Button btnledName = (Button)sender; 
        GridViewRow Grow = (GridViewRow)btnledName.NamingContainer;   
        Label lblname = new Label();  
    
        Label lblPickUpPoint= new Label(); 
        lblname = (Label)Grow.FindControl("lblname"); 
    
        lblPickUpPoint = (Label)Grow.FindControl("lblname"); 
        #region 
        if (lblname.Text.Length > 0) 
        {   
          //Add in your work sheet 
    
    
    
        } 
    
        #endregion 
    } 
    
    0
    protected void Button1_Click(object sender, EventArgs e) 
        { 
         int i = 0; 
         for (i = 0; i <= GvSchedule.Rows.Count - 1; i++) 
         { 
          if (((CheckBox)GvSchedule.Rows[i].FindControl("ChkIsService")).Checked) 
          { 
           string catName = ((Label)GvSchedule.Rows[i].FindControl("lblCatName")).Text; 
           var subCatName = ((Label)GvSchedule.Rows[i].FindControl("lblSubCatName")).Text; 
          } 
         } 
        } 
    
    +0

    मैंने एडबटन के क्लिक इवेंट में अपनी परियोजना में कोशिश की ......... यह ठीक काम कर रहा है –

    1

    इस कोड का उपयोग का प्रयास करें संरक्षित में मदद करता है मुझे भी ऐसी ही समस्या का समाधान करना पड़ा था। मुझे लगता है कि यह कोड अधिक गतिशील है और आपको हर बार लेबल का नाम नहीं ढूंढना पड़ेगा। लेकिन नियंत्रण और सूचकांक नियंत्रण [] के बीच पत्राचार रखने के लिए:

    for (int row = 1; row <= totalRows; row++) 
    { 
        for (int col = 0; col < totalCols; col++) 
        { 
         if (GridView1.Columns[col].Visible) 
         { 
          if (String.IsNullOrEmpty(GridView1.Rows[row - 1].Cells[col].Text)) 
          { 
           if (GridView1.Rows[row - 1].Cells[col].Controls[1].GetType().ToString().Contains("Label")) 
           { 
            Label LB = (Label)GridView1.Rows[row - 1].Cells[col].Controls[1]; 
            workSheet.Cells[row + 1, col + 1].Value = LB.Text; 
           } 
           else if (GridView1.Rows[row - 1].Cells[col].Controls[1].GetType().ToString().Contains("LinkButton")) 
           { 
            LinkButton LB = (LinkButton)GridView1.Rows[row - 1].Cells[col].Controls[1]; 
            workSheet.Cells[row + 1, col + 1].Value = LB.Text; 
           } 
          } 
          else 
          { 
           workSheet.Cells[row + 1, col + 1].Value = GridView1.Rows[row - 1].Cells[col].Text; 
          } 
    

     संबंधित मुद्दे

    • कोई संबंधित समस्या नहीं^_^