2011-09-23 79 views
0

我試圖導出元素在gridview excel電子表格。該網格隱藏視病情幾個欄目,這裏是一些代碼導出GridView到Excel結果空白列被插入到GridView中間

在按鈕的Def

的,這是部分在那裏我有概率與出口

worksheet = workbook.Worksheets["Sheet1"]; 
    //string wname = tab.Text.Replace(" ", "_"); 
    //worksheet.Name = wname; 
    range = worksheet.Cells["A1"]; 

    for (int i = 0; i < fr_chart_grid.Columns.Count; i++)//count = 7 
    { 
     if (fr_chart_grid.Columns[i].Visible == true) 
      dtData.Columns.Add(fr_chart_grid.HeaderRow.Cells[i].Text); 
    } 


    // add each of the data rows to the table 
    foreach (GridViewRow row in fr_chart_grid.Rows) 
    { 
     DataRow drData; 
     drData = dtData.NewRow(); 
     for (int i = 0; i < row.Cells.Count; i++) 
     { 
      if (fr_chart_grid.Columns[i].Visible == true) 
       drData[i] = row.Cells[i].Text; 
     } 
     dtData.Rows.Add(drData); 
    } 

    range.CopyFromDataTable(dtData, SpreadsheetGear.Data.SetDataFlags.None); 

這裏是我如何電網被定義

<asp:GridView ID="fr_chart_grid" runat="server" AutoGenerateColumns="False"> 
    <Columns> 
    <asp:BoundField DataField="Dateval" HeaderText="Date" DataFormatString="{0:d}" HtmlEncode="false" /> 
    <asp:BoundField DataField="Col1" HeaderText="Data" DataFormatString="{0:f3}" /> 
    <asp:BoundField DataField="Col2" HeaderText="" DataFormatString="{0:f3}"/> 
    <asp:BoundField DataField="Col3" HeaderText="" DataFormatString="{0:f3}"/> 
    <asp:BoundField DataField="Col4" HeaderText="" DataFormatString="{0:f3}"/> 
    <asp:BoundField DataField="Col5" HeaderText="" DataFormatString="{0:f3}"/> 
    <asp:BoundField DataField="Col6" HeaderText="" DataFormatString="{0:f3}"/> 
    </Columns> 
</asp:GridView> 

我的問題是,我有空白欄時,我導出的數據字段,有時wuts假設是在山坳3進入第4欄,與第3欄是空白的。 othertimes我有5行,它告訴我它找不到第5行...這是令人沮喪的....有沒有辦法我可以擺脫空白列?它是隨機的,它並沒有顯示當我運行網站,但它導致概率,當我出口到Excel

回答

0

看起來你至少有一個問題...你在哪裏設置新單元格的數據行,你在索引我的行.Cells和drData - 當某些列不可見時它們不同步。

此行是麻煩:

drData[i] = row.Cells[i].Text; 

drData可能有較少的項目,比我由於不可見列。您將覆蓋用於其他列的數據,或者獲取例外。您需要確保將drData與可見列的索引進行索引。

像這樣的東西應該工作:

int j = 0; 
for (int i = 0; i < row.Cells.Count; i++) 
{ 
    if (fr_chart_grid.Columns[i].Visible == true) 
    { 
     drData[j] = row.Cells[i].Text; 
     j++; 
    } 
}