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

    Đây là đánh dấu của tôi về GridView.Cách lấy giá trị từ các trường mẫu trong 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> 
    

    Tôi có một nút lưu trữ các giá trị trong ô bảng tính của đối tượng 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; 
        } 
    } 
    

    Làm thế nào để có được các giá trị của GridView và lưu nó trong một bảng tính, như GridView2.Rows[i].Cells[j] .text trả về chuỗi rỗng.

    Trả lời

    7

    của bạn đang thiếu một loại đúc. Làm điều đó như this-

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

    Update- Nếu bạn có thể đặt tên nhãn của bạn như Label0 và Label1, sau đó trong thứ hai cho tiếp vòng

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

    Đối với Tiêu đề giáo khoa string hText = GridView2.HeaderRow.Cells[your column number].Text;

    +0

    okay ... nhưng, cách thực hiện cho các điều khiển khác ... nếu vòng lặp nhập vào tym thứ hai ... làm thế nào tôi có thể trỏ nhãn đến 'lblPickUpPoint' .... cảm ơn – Kulkarni

    +0

    hoạt động như một người đàn ông quyến rũ .... cảm ơn ...... Chỉnh sửa: Bây giờ tôi nhận được tất cả các dữ liệu bên trong GridView .. làm thế nào tôi có thể làm cho 'HeaderText HeaderText' nhận được bên trong bảng tính là tốt ... ??? cảm ơn trước ... – Kulkarni

    +0

    Làm thế nào tôi có thể làm cho 'HeaderText HeaderText' nhận được bên trong bảng tính là tốt ... ?? – Kulkarni

    3

    Đối với lấy giá trị làm điều này:

    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

    tôi đã nhận các giá trị từ các lĩnh vực, làm thế nào nên tôi gắn nó vào bảng ... như 'xlWorkSheet.Cells [i + 1, j + 1] = GridView2.Rows [i] .Cells [j] .Text; ' Tôi cần làm gì, nếu tôi cần đặt chúng theo thứ tự ... chỉnh sửa: Tôi có cần thứ hai không cho vòng lặp .. ??? – Kulkarni

    +1

    Nếu bạn muốn viết từng dòng để excel, hãy thử: http: //www.clear-lines.com/blog/post/Write-data-to-an-Excel-worksheet-with-C-fast.aspx Nếu bạn muốn xuất toàn khung hình, hãy thử cách này: http: //www.codeproject.com/Tips/477436/Export-Gridview-Data-to-Excel-in-ASP-NET – sajanyamaha

    0

    {cell}.Text sẽ chỉ hoạt động nếu không có quyền kiểm soát trong phạm vi TemplateField. Bạn đã thêm một nhãn vào mẫu của bạn, đó là lý do tại sao trước tiên bạn cần tìm điều khiển, đưa đối tượng của bạn vào điều khiển và truy cập các thuộc tính của điều khiển nếu cần.

    Nếu bạn muốn có một cách tiếp cận chung chung hơn bạn luôn có thể làm như sau (loại bỏ sự kiểm soát nhãn và chỉ cần thêm lĩnh vực đánh giá):

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

    Khi bạn sử dụng mã ban đầu bạn sử dụng, {cell}.Text nên không trở lại còn trống.

    +0

    Xin lỗi, tôi đã thề rằng đã làm việc ở một giai đoạn nhưng tôi phải bị nhầm lẫn khủng khiếp. Tôi nghĩ rằng đặt cược tốt nhất là sử dụng một BoundField nếu bạn sẽ không làm bất cứ điều gì tùy chỉnh với dữ liệu của bạn. Nếu không, bạn có thể sử dụng '((Label) gvTest.Rows [i] .Cells [j] .Controls [1]). Text' Theo hiểu biết tốt nhất của tôi, điều khiển nhãn sẽ luôn ở chỉ số 1 giả sử bạn không có thêm các điều khiển được thêm vào mẫu của bạn trước nhãn. – cbillowes

    -1

    sử dụng loại hình này "Nút btnledName = (Button) người gửi;" Nó Sẽ giúp bạn protected void (người gửi đối tượng, EventArgs e) btnledName_Click {

    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

    Tôi đã thử trong dự án của mình tại sự kiện nhấp của Addbutton ......... nó hoạt động tốt –

    1

    Hãy thử sử dụng mã này, Tôi đã có một vấn đề tương tự. Tôi nghĩ rằng mã này là năng động hơn và bạn không cần phải tìm tên của nhãn mỗi lần. Nhưng để giữ sự tương ứng giữa các điều khiển Và Controls chỉ số []:

    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; 
          } 
    
    Các vấn đề liên quan