2016-02-12 43 views
2

我想基於某些條件在GridVIew上添加一些行,並且我得到「指定的參數超出範圍有效值「錯誤。 這是我的GridView:在GridView上添加行得到「指定的參數超出有效值的範圍」

<asp:GridView ID="gvConcept" runat="server" CellPadding="0" CssClass="table" CellSpacing="0" AutoGenerateColumns="false" GridLines="Vertical" BorderStyle="Solid" ShowFooter="false" OnRowDataBound="gvConcept_RowDataBound" OnRowCreated="gvConcept_RowCreated" > 
     <Columns> 
      <asp:BoundField DataField="Concept" HeaderText=" Concept" /> 
      <asp:BoundField DataField="Client" HeaderText=" Client" /> 
      <asp:BoundField DataField="YTD" HeaderText=" YTD" ItemStyle-HorizontalAlign="Right" /> 
     </Columns> 
    </asp:GridView> 

這是我的代碼隱藏:

string ParAnt = string.Empty; 
string partner = string.Empty; 
protected void gvConcept_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     ParAnt = DataBinder.Eval(e.Row.DataItem, "Partner").ToString(); 
    } 
} 

public void AddNewRow(object sender, GridViewRowEventArgs e, int rowIndex) 
{ 
    GridView GridView1 = (GridView)sender; 
    GridViewRow NewTotalRow = new GridViewRow(0, 0, DataControlRowType.DataRow, DataControlRowState.Insert); 
    NewTotalRow.Font.Bold = true; 
    NewTotalRow.ForeColor = System.Drawing.Color.Black; 
    NewTotalRow.BackColor = System.Drawing.Color.LightGray; 
    TableCell HeaderCell = new TableCell(); 
    HeaderCell.Height = 10; 
    HeaderCell.HorizontalAlign = HorizontalAlign.Left; 
    HeaderCell.ColumnSpan = 4; 
    HeaderCell.Text = partner; 
    NewTotalRow.Cells.Add(HeaderCell); 
    GridView1.Controls[0].Controls.AddAt(e.Row.RowIndex + rowIndex, NewTotalRow); 
} 

protected void gvConcept_RowCreated(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     partner = DataBinder.Eval(e.Row.DataItem, "Partner").ToString(); 
     if (ParAnt != partner) 
     { 
      AddNewRow(sender, e, e.Row.RowIndex+1); 
      ParAnt = DataBinder.Eval(e.Row.DataItem, "Partner").ToString(); 
     } 
    } 
} 

第一行正確添加,但不能添加的下一個的人(在我的情況2)。 任何人輸入?謝謝。

+0

你檢查過使用調試,什麼是e.Row.RowIndex和rowIndex第二次調用? –

+0

'e.Row.RowIndex + 1'可以替換爲'e.Row.RowIndex' –

回答

1

我相信你應該用1作爲最後一個參數來調用你的AddNewRow函數,而不是e.RowRowIndex + 1.在第一次調用時,這會傳遞1作爲值(0 + 1),但第二次傳遞2 1 + 1)和InsertAt AddAt將被稱爲索引3:e.Row.RowIndex + 2 = 3.

+0

只需按照建議更改代碼即可。首先在正確的位置添加行。第二行,之前添加1行,第三行之前添加2行。 –

+0

爲您手動添加多少行創建一個計數器。提高你的指數。因此,對於第一行,您將添加0,對於第二個,對於第三個,等等......雖然它有點奇怪......最好在AddAt上檢查您的索引。 –

+0

只是在AddNewRow上放置了一個計數器,但儘管它只增加了3行,計數器也會減少到17個。 –