“Argument spécifié a été hors de la plage de valeurs valides”

Je suis en ajoutant des Lignes dynamiques dans ASP.Net Contrôle GridView avec des zones de texte. Mais j'obtiens le message d'erreur ci-dessous lorsque je clique sur mon Ajouter de Nouvelle Ligne bouton.

Spécifié en argument était hors de la plage de valeurs valides. Nom du paramètre: index

Ce qui pourrait être l'erreur ?

Le code dans mon .aspx fichier

<div id="Div1" class="divTable">
<asp:gridview id="Gridview1" runat="server" autogeneratecolumns="false" gridlines="None"
width="100%" height="100%">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<div class="divRow">
<div class="divColumn">
<div>
<asp:Label ID="lbl1" runat="server" Text="Type Name" CssClass="formLable"></asp:Label>
</div>
<div>
<asp:TextBox ID="txt_type" Width="200" runat="server" CssClass="txtbox"></asp:TextBox>
</div>
<span>
<asp:RequiredFieldValidator ID="TYPE_NAME_VAL" runat="server" ControlToValidate="txt_type"
ErrorMessage="Type is required." Display="Dynamic" CssClass="error"></asp:RequiredFieldValidator>
</span>
</div>
<div class="divColumn">
<div>
<asp:Label ID="lbl2" runat="server" Text="Total" CssClass="formLable"></asp:Label>
</div>
<div>
<asp:TextBox ID="txt_total" Width="200" runat="server" CssClass="txtbox"></asp:TextBox>
</div>
</div>
</div>
<div class="divRow">
<div class="divColumn">
<div>
<asp:Label ID="lbl3" runat="server" Text="Max" CssClass="formLable"></asp:Label>
</div>
<div>
<asp:TextBox ID="txt_max" Width="200" runat="server" CssClass="txtbox"></asp:TextBox>
</div>
</div>
<div class="divColumn">
<div>
<asp:Label ID="lbl4" runat="server" Text="Min" CssClass="formLable"></asp:Label>
</div>
<div>
<asp:TextBox ID="txt_min" Width="200" runat="server" CssClass="txtbox"></asp:TextBox>
</div>
</div>
<div class="divColumn">
<div>
<asp:Label ID="lbl5" runat="server" Text="Rate" CssClass="formLable"></asp:Label>
</div>
<div>
<asp:TextBox ID="txt_rate" Width="200" runat="server" CssClass="txtbox"></asp:TextBox>
</div>
</div>
</div>
<asp:Button ID="ButtonAdd" runat="server" Text="Add New Row" OnClick="ButtonAdd_Click"
CausesValidation="False" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:gridview>
</div>

De code C# de ButtonAdd_Click()

if (ViewState["CurrentTable"] != null)
{
DataTable dtCurrentTable = (DataTable)ViewState["CurrentTable"];
DataRow drCurrentRow = null;
if (dtCurrentTable.Rows.Count > 0)
{
for (int i = 1; i <= dtCurrentTable.Rows.Count; i++)
{
//extract the TextBox values
TextBox box1 = (TextBox)Gridview1.Rows[rowIndex].Cells[1].FindControl("txt_type");
TextBox box2 = (TextBox)Gridview1.Rows[rowIndex].Cells[2].FindControl("txt_total");
TextBox box3 = (TextBox)Gridview1.Rows[rowIndex].Cells[3].FindControl("txt_max");
TextBox box4 = (TextBox)Gridview1.Rows[rowIndex].Cells[4].FindControl("txt_min");
TextBox box5 = (TextBox)Gridview1.Rows[rowIndex].Cells[5].FindControl("txt_rate");
drCurrentRow = dtCurrentTable.NewRow();
dtCurrentTable.Rows[i - 1]["Column1"] = box1.Text;
dtCurrentTable.Rows[i - 1]["Column2"] = box2.Text;
dtCurrentTable.Rows[i - 1]["Column3"] = box3.Text;
dtCurrentTable.Rows[i - 1]["Column4"] = box4.Text;
dtCurrentTable.Rows[i - 1]["Column5"] = box5.Text;
rowIndex++;
}
dtCurrentTable.Rows.Add(drCurrentRow);
ViewState["CurrentTable"] = dtCurrentTable;
Gridview1.DataSource = dtCurrentTable;
Gridview1.DataBind();
}
}
else
{
Response.Write("ViewState is null");
}
De toute évidence, vous êtes à l'aide d'un indice qui est hors de portée. Débogage pour la ligne à laquelle l'erreur se produit et découvrez pourquoi votre index n'est pas dans la gamme (probablement à élevé).
L'erreur que vous obtenez devrait spécifier un numéro de ligne. Vérifiez que le numéro de ligne et de voir où vous essayez de récupérer quelque chose basé sur l'index.
ligne est TextBox box1 = (TextBox)Gridview1.Rows[rowIndex].Cells[1].FindControl("txt_type");
Lors du débogage d'ajouter une alerte pour "(zone de texte)Gridview1.Les rangées[rowIndex]" et pour "(zone de texte)Gridview1.Les rangées[rowIndex].Les cellules[1]" et de voir celui qui donne l'erreur, sur cette base, vous devriez voir ce que l'indice est le mauvais.
Maintenant vient l'erreur TextBox box5 = (TextBox)Gridview1.Rows[rowIndex].Cells[5].FindControl("txt_rate"); ligne. j'ai changé Cells[5] à Cells[4] et de l'exécuter. puis il a travaillé.quel est le problème ?

OriginalL'auteur Bishan | 2013-06-11