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

    To jest mój znacznik GridView.Jak uzyskać wartości z pól szablonu w GridView?

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

    Mam przycisk, który przechowuje wartości w komórkach arkusza kalkulacyjnego obiektu excel.

    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; 
        } 
    } 
    

    Jak mogę uzyskać wartości GridView i przechowywać go w arkuszu, jak GridView2.Rows[i].Cells[j] .text zwraca pusty ciąg.

    Odpowiedz

    7

    Twój brakuje typu obsady. Zrób to jak to-

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

    update Jeśli można nazwać etykiet jak Label0 i Label1, a następnie w drugim do pętli 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; 
        } 
    

    dla nagłówka tekstowych kierujących string hText = GridView2.HeaderRow.Cells[your column number].Text;

    +0

    ok ... ale, jak to zrobić dla innych elementów sterujących ... jeśli pętla wchodzi do drugiego tego ... jak mogę skierować etykietę do 'lblPickUpPoint' ... dzięki – Kulkarni

    +0

    działa jak człowiek zaklęcia .... dzięki ...... Edycja: Teraz otrzymuję wszystkie dane w widoku Gridview .. jak mogę uczynić 'TemplateField HeaderText' dostać się również do arkusza roboczego ... ??? z góry dzięki ... – Kulkarni

    +0

    Jak mogę uczynić 'TemplateField HeaderText' dostać się również do arkusza roboczego ...? – Kulkarni

    3

    do pobierania wartości to zrobić:

    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

    Dostałem wartości z pól, jak należy powiązać go do arkusza ... jak 'xlWorkSheet.Cells [i + 1, j + 1] = GridView2.Rows [i] .Cells [j] .Text; ' Co muszę zrobić, jeśli muszę je uporządkować ... edytuj: Czy potrzebuję drugiego dla pętli..??? – Kulkarni

    +1

    Jeśli chcesz napisać wiersz po linii do programu Excel wypróbuj to: http: //www.clear-lines.com/blog/post/Write-data-to-an-Excel-worksheet-with-C-fast.aspx Jeśli chcesz pełny eksport widoku siatki spróbuj tego: http: //www.codeproject.com/Tips/477436/Export-Gridview-Data-to-Excel-in-ASP-NET – sajanyamaha

    0

    {cell}.Text będzie działać tylko wtedy, gdy nie ma kontroli w obrębie TemplateField. Dodałeś etykietę do szablonu, dlatego najpierw musisz znaleźć kontrolkę, rzucić swój obiekt do kontroli i uzyskać dostęp do właściwości kontrolki w razie potrzeby.

    Jeśli chcesz bardziej ogólne podejście można zawsze wykonać następujące czynności (usuń kontroli etykiet i po prostu dodać pole analizowany):

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

    Podczas korzystania kod początkowo używany, {cell}.Text powinien nie dłuższy powrót pusty.

    +0

    Przepraszam, mógłbym przysiąc, że pracował na pewnym etapie, ale muszę się potwornie pomylić. Myślę, że najlepiej jest użyć BoundField, jeśli nie zamierzasz robić nic niestandardowego ze swoimi danymi. W przeciwnym razie możesz użyć '((Label) gvTest.Rows [i] .Cells [j] .Controls [1]). 'Zgodnie z moją wiedzą, kontrola etykiet zawsze będzie na indeksie 1 przy założeniu, że nie masz żadnych dodatkowych elementy sterujące dodane w szablonie przed etykietą. – cbillowes

    -1

    stosowanie tego typu "Button btnledName = (przycisk) nadawca;" To ll pomaga protected void btnledName_Click (object sender, EventArgs e) {

    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

    Próbowałem w moim projekcie w wydarzeniu kliknięcia Addbutton ......... działa dobrze –

    1

    Spróbuj użyć tego kodu, Miałem podobny problem. Myślę, że ten kod jest bardziej dynamiczny i za każdym razem nie musisz znajdować nazwy etykiety. Ale aby utrzymać związek między kontroli i kontroli indeksu []:

    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; 
          } 
    
    Powiązane problemy