错误:指定的参数超出了有效值的范围。在RowDataBound Gridview中

时间:2015-11-26 08:24:36

标签: c# asp.net gridview error-handling rowdatabound

我想要绑定数据gridview并更改数据' 0'到' - ' 。 但是错误:指定的参数超出了有效值的范围。参数名称:index

代码asp

 <asp:GridView ID="GridView1" runat="server" 
  AutoGenerateColumns="False" AllowPaging="true" 
  OnRowCreated="GridView1_RowCreated"  
  OnRowDataBound="GridView1_RowDataBound" >
   <Columns>
     <asp:BoundField DataField="amt" HeaderText="Total" 
          DataFormatString="{0:#,##0.00000}" ItemStyle-HorizontalAlign="Right" />
   </Columns>               
 </asp:GridView>

代码C#

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
      {
          if (e.Row.RowType == DataControlRowType.DataRow)
          {                
             string sAmt = DataBinder.Eval(e.Row.DataItem, "amt").ToString();    

          if (sAmt == "0.00000")
          {
             e.Row.Cells[10].Text = "-"; <<< Line Error
          }
     }
 }

如果字段AMT显示0。

我想改为&#34; 0&#34;到&#34; - &#34;

请帮帮我。谢谢你的时间。 ;)

3 个答案:

答案 0 :(得分:1)

索引为10:

e.Row.Cells[10].Text = "-"; <<< Line Error

有效?我的意思是阵列中有11个项目,你可能试图访问数组范围之外的东西。

答案 1 :(得分:0)

错误消息告诉您在GridView中没有索引为10的单元格。确保 Cells 数组是大的。 可能应该尝试

e.Row.Cells[e.Row.Cells.Length-1].Text = "-";

答案 2 :(得分:0)

首先检查所选行中是否存在第9列(从0开始为e.Row.Cells[10])。

如果您想在GridView单元格下方显示特定值,请使用TemplateField Gridview

 <asp:TemplateField HeaderText="Gender">
         <ItemTemplate>
               <asp:Label runat="server" Text='<% #GetLangID(Eval("langid2")) %>' />
         </ItemTemplate>
 </asp:TemplateField>

这将是你的代码背后

public string GETLangID(object dataItem)
{
    string text = string.Empty;
    int? val = dataItem as int?;
    switch (val)
    {
        case 0:
            text = "-";
            break;
        case 1:
            text = "One";
            break;
        case 2:
            text = "two";
            break;

    }
    return text;
}