"指定的参数已超出有效值&QUOT范围的; [英] "Specified argument was out of the range of valid values"
问题描述
我添加的行动在ASP.Net GridView控件与文本框。但我发现了下面当我点击我的添加新行按钮的错误。
指定的参数已超出有效值的范围。参数名称:索引
块引用>这可能是什么错误?
钍code在我的的.aspx 的文件
< DIV ID ='DIV1级=divTable>
< ASP:GridView控件ID =Gridview1=服务器的AutoGenerateColumns =false的网格线=无
WIDTH =100%HEIGHT =100%>
<柱体和GT;
< ASP:的TemplateField>
<&ItemTemplate中GT;
< DIV CLASS =divRow>
< DIV CLASS =divColumn>
< DIV>
< ASP:标签ID =LBL1=服务器文本=类型名称的CssClass =formLable>< / ASP:标签>
< / DIV>
< DIV>
< ASP:文本框ID =txt_typeWIDTH =200=服务器的CssClass =txtbox>< / ASP:文本框>
< / DIV>
<跨度>
< ASP:的RequiredFieldValidator ID =TYPE_NAME_VAL=服务器的ControlToValidate =txt_type
的ErrorMessage =类型是必需的。显示=动态的CssClass =错误>< / ASP:&的RequiredFieldValidator GT;
< / SPAN>
< / DIV>
< DIV CLASS =divColumn>
< DIV>
< ASP:标签ID =LBL2=服务器文本=总的CssClass =formLable>< / ASP:标签>
< / DIV>
< DIV>
< ASP:文本框ID =txt_totalWIDTH =200=服务器的CssClass =txtbox>< / ASP:文本框>
< / DIV>
< / DIV>
< / DIV>
< DIV CLASS =divRow>
< DIV CLASS =divColumn>
< DIV>
< ASP:标签ID =lbl3=服务器文本=最大的CssClass =formLable>< / ASP:标签>
< / DIV>
< DIV>
< ASP:文本框ID =txt_maxWIDTH =200=服务器的CssClass =txtbox>< / ASP:文本框>
< / DIV>
< / DIV>
< DIV CLASS =divColumn>
< DIV>
< ASP:标签ID =lbl4=服务器文本=最小的CssClass =formLable>< / ASP:标签>
< / DIV>
< DIV>
< ASP:文本框ID =txt_minWIDTH =200=服务器的CssClass =txtbox>< / ASP:文本框>
< / DIV>
< / DIV>
< DIV CLASS =divColumn>
< DIV>
< ASP:标签ID =lbl5=服务器文本=率的CssClass =formLable>< / ASP:标签>
< / DIV>
< DIV>
< ASP:文本框ID =txt_rateWIDTH =200=服务器的CssClass =txtbox>< / ASP:文本框>
< / DIV>
< / DIV>
< / DIV>
< ASP:按钮的ID =ButtonAdd=服务器文本=添加新行的OnClick =ButtonAdd_Click
的CausesValidation =FALSE/>
< / ItemTemplate中>
< / ASP:的TemplateField>
< /专栏>
< / ASP:GridView的>
< / DIV>ButtonAdd_Click()的 C#code
如果(的ViewState [CurrentTable]!= NULL)
{
数据表dtCurrentTable =(数据表)的ViewState [CurrentTable];
DataRow的drCurrentRow = NULL;
如果(dtCurrentTable.Rows.Count大于0)
{
的for(int i = 1; I< = dtCurrentTable.Rows.Count;我++)
{
//提取文本框值
文本框BOX1 =(文本框)Gridview1.Rows [rowIndex位置] .Cells [1] .FindControl(txt_type);
文本框BOX2 =(文本框)Gridview1.Rows [rowIndex位置] .Cells [2] .FindControl(txt_total);
文本框BOX3 =(文本框)Gridview1.Rows [rowIndex位置] .Cells [3] .FindControl(txt_max);
文本框box4 =(文本框)Gridview1.Rows [rowIndex位置] .Cells [4] .FindControl(txt_min);
文本框box5 =(文本框)Gridview1.Rows [rowIndex位置] .Cells [5] .FindControl(txt_rate); drCurrentRow = dtCurrentTable.NewRow(); dtCurrentTable.Rows [我 - 1] [列1] = box1.Text;
dtCurrentTable.Rows [我 - 1] [列2] = box2.Text;
dtCurrentTable.Rows [我 - 1] [栏3] = box3.Text;
dtCurrentTable.Rows [我 - 1] [Column4] = box4.Text;
dtCurrentTable.Rows [我 - 1] [Column5] = box5.Text; rowIndex位置++;
}
dtCurrentTable.Rows.Add(drCurrentRow);
的ViewState [CurrentTable] = dtCurrentTable; Gridview1.DataSource = dtCurrentTable;
Gridview1.DataBind();
}
}
其他
{
的Response.Write(ViewState中为空);
}
解决方案看来你正试图获得5个项目进行收集与5个项目。看着你code,看来你开始你的集合中的第二个值的位置是1集是从零开始,所以你应该索引为0的项目开始试试这个:
文本框BOX1 =(文本框)Gridview1.Rows [I] .Cells [0] .FindControl(txt_type);
文本框BOX2 =(文本框)Gridview1.Rows [I] .Cells [1] .FindControl(txt_total);
文本框BOX3 =(文本框)Gridview1.Rows [I] .Cells [2] .FindControl(txt_max);
文本框box4 =(文本框)Gridview1.Rows [I] .Cells [3] .FindControl(txt_min);
文本框box5 =(文本框)Gridview1.Rows [I] .Cells [4] .FindControl(txt_rate);I'm adding dynamic Rows in ASP.Net GridView Control with TextBoxes. But I'm getting the error below when I click on my Add New Row button.
Specified argument was out of the range of valid values. Parameter name: index
What could be the error ?
Th code in my .aspx file
<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>
C# code of 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"); }
解决方案It seems that you are trying to get 5 items out of a collection with 5 items. Looking at your code, it seems you're starting at the second value in your collection at position 1. Collections are zero-based, so you should start with the item at index 0. Try this:
TextBox box1 = (TextBox)Gridview1.Rows[i].Cells[0].FindControl("txt_type"); TextBox box2 = (TextBox)Gridview1.Rows[i].Cells[1].FindControl("txt_total"); TextBox box3 = (TextBox)Gridview1.Rows[i].Cells[2].FindControl("txt_max"); TextBox box4 = (TextBox)Gridview1.Rows[i].Cells[3].FindControl("txt_min"); TextBox box5 = (TextBox)Gridview1.Rows[i].Cells[4].FindControl("txt_rate");
这篇关于&QUOT;指定的参数已超出有效值&QUOT范围的;的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!