当前位置: 首页 > 编程语言 > C#

索引超出范围,必须是非负数且小于集合共享的大小

时间:2023-04-10 21:35:30 C#

索引超出范围。必须是非负数且小于集合的大小在编译网格视图以显示一组订单时,我得到一个索引超出范围的异常。添加新行时不会发生这种情况,但当我尝试删除或更新行时会发生这种情况。任何帮助是极大的赞赏。设计师是:代号隐藏是:publicclassLensOrdersCls{privatestringcnstr=ConfigurationManager.ConnectionStrings["PatientConnectionString"].ConnectionString;私有字符串sql;publicLensOrdersCls(){////TODO:在此处添加构造函数逻辑//}publicvoidInsert(intOrderID,stringDate,stringOrderTaker,stringOrderBy,stringMaterial,stringTint,stringBCOR,stringPower,stringDiameter,stringDesign,stringNotes){stringsql="InsertIntoLensOrders(OrderID,Date,OrderTaker,OrderBy,Material,Tint,BCOR,Power,Diameter,Design,Notes)Values('"+OrderID+"','"+日期+"','"+OrderTaker+"','"+OrderBy+"','"+Material+"','"+Tint+"','"+BCOR+"','"+Power+"','"+直径+"','"+设计+"','"+注释+"')";SqlConnectionconn=newSqlConnection(cnstr);conn.Open();SqlCommandcmd=newSqlCommand(sql,conn);cmd.ExecuteNonQuery();conn.Close();conn.Dispose();}publicDataTableFetch(){stringsql="Select*FromLensOrders";SqlDataAdapterda=newSqlDataAdapter(sql,cnstr);DataTabledt=newDataTable();da.Fill(dt);returndt;}publicvoidUpdate(intOrderID,stringDate,stringOrderTaker,stringOrderBy,字符串Material,stringTint,stringBCOR,stringPower,stringDiameter,stringDesign,stringNotes){stringsql="UPDATELensOrdersSETOrderID='"+OrderID+"',Date='"+Date+"',OrderTaker=复制代码'"+OrderTaker+"',OrderBy='"+OrderBy+"'Material="+Material+"'Tint='"+Tint+"'BCOR='"+BCOR+"'Power'"+Power+"'Diameter='"+Diameter+"'Design='"+Design+"'Notes='"+Notes;SqlConnectionconn=newSqlConnection(cnstr);conn.Open();SqlCommandcmd=newSqlCommand(sql,conn);cmd.ExecuteNonQuery();conn.Close();conn.Dispose();}publicvoidDelete(intOrderID){stringsql="DeleteLensOrdersWhereOrderID="+OrderID;SqlConnectionconn=newSqlConnection(cnstr);conn.Open();SqlCommandcmd=newSqlCommand(sql,conn);cmd.ExecuteNonQuery();conn.Close();conn.Dispose();}}页面代码隐藏是:publicpartialclassDefault:System.Web.UI.Page{LensOrdersClsLensOrder=newLensOrdersCls();privatevoidFillOrdersInGrid(){DataTabledtOrder=LensOrder.Fetch();如果(dtOrder.Rows.Count>0){GridView1.DataSource=dtOrder;GridView1.DataBind();}else{dtOrder.Rows.Add(dtOrder.NewRow());GridView1.DataSource=dtOrder;GridView1.DataBind();intTotalColumns=GridView1.Rows[0].Cells.Count;GridView1.Rows[0].Cells.Clear();GridView1.Rows[0].Cells.Add(newTableCell());GridView1.Rows[0].Cells[0].ColumnSpan=TotalColumns;GridView1.Rows[0].Cells[0].Text="未找到记录";}}protectedvoidPage_Load(objectsender,EventArgse){if(!IsPostBack){FillOrdersInGrid();test.Text=GridView1.Rows[0].Cells.Count.ToString();}}protectedvoidGridView1_RowCommand(objectsender,GridViewCommandEventArgse){if(e.CommandName.Equals("AddNew")){TextBoxtxtNewOrderID=(TextBox)GridView1.FooterRow.FindControl("txtNewOrderID");TextBoxtxtNewDate=(TextBox)GridView1.FooterRow.FindControl("txtNewDate");TextBoxtxtNewOrderTaker=(TextBox)GridView1.FooterRow.FindControl("txtNewOrderTaker");TextBoxtxtNewOrderBy=(TextBox)GridView1.FooterRow.FindControl("txtNewOrderBy");TextBoxtxtNewMaterial=(TextBox)GridView1.FooterRow.FindControl("txtNewMaterial");TextBoxtxtNewTint=(TextBox)GridView1.FooterRow.FindControl("txtNewTint");TextBoxtxtNewBCOR=(TextBox)GridView1.FooterRow.FindControl("txtNewBCOR");TextBoxtxtNewPower=(TextBox)GridView1.FooterRow.FindControl("txtNewPower");TextBoxtxtNewDiameter=(TextBox)GridView1.FooterRow.FindControl("txtNewDiameter");TextBoxtxtNewDesign=(TextBox)GridView1.FooterRow.FindControl("txtNewDesign");TextBoxtxtNewNotes=(TextBox)GridView1.FooterRow.FindControl("txtNewNotes");LensOrder.Insert(Convert.ToInt32(txtNewOrderID.Text),txtNewDate.Text,txtNewOrderTaker.Text、txtNewOrderBy.Text、txtNewMaterial.Text、txtNewTint.Text、txtNewBCOR.Text、txtNewPower.Text、txtNewDiameter.Text、txtNewDesign.Text、txtNewNotes.Text);FillOrdersInGrid();}}//行编辑protectedvoidGridView1_RowEditing(objectsender,GridViewEditEventArgse){GridView1.EditIndex=e.NewEditIndex;FillOrdersInGrid();}//行取消编辑protectedvoidGridView1_RowCancelingEdit(objectsender,GridViewCancelEditEventArgse){GridView1.EditIndex=-1;FillOrdersInGrid();}//行更新protectedvoidGridView1_RowUpdating(objectsender,GridViewUpdateEventArgse){TextBoxtxtOrderID=(TextBox)GridView1.Rows[e.RowIndex].FindControl("txtOrderID");TextBoxtxtDate=(TextBox)GridView1.Rows[e.RowIndex].FindControl("txtDate");TextBoxtxtOrderTaker=(TextBox)GridView1.Rows[e.RowIndex].FindControl("txtOrderTaker");TextBoxtxtOrderBy=(TextBox)GridView1.Rows[e.RowIndex].FindControl("txtNewOrderBy");文本框txtMaterial=(TextBox)GridView1.Rows[e.RowIndex].FindControl("txtMaterial");TextBoxtxtTint=(TextBox)GridView1.Rows[e.RowIndex].FindControl("txtTint");TextBoxtxtBCOR=(TextBox)GridView1.Rows[e.RowIndex].FindControl("txtBCOR");TextBoxtxtPower=(TextBox)GridView1.Rows[e.RowIndex].FindControl("txtPower");TextBoxtxtDiameter=(TextBox)GridView1.Rows[e.RowIndex].FindControl("txtDiameter");TextBoxtxtDesign=(TextBox)GridView1.Rows[e.RowIndex].FindControl("txtDesign");TextBoxtxtNotes=(TextBox)GridView1.Rows[e.RowIndex].FindControl("txtNotes");LensOrder.Update(Convert.ToInt32(GridView1.DataKeys[e.RowIndex].Values[0].ToString()),txtDate.Text,txtOrderTaker.Text,txtOrderBy.Text,txtMaterial.Text,txtTint.Text,txtBCOR.Text,txtPower.Text,txtDiameter.Text,txtDesign.Text,txtNotes.Text);GridView1.EditIndex=-1;FillOrdersInGrid();}//删除行protectedvoidGridView1_RowDeleting(objectsender,GridViewDeleteEventArgse){LensOrder.Delete(Convert.ToInt32(GridView1.DataKeys[e.RowIndex].Values[0].ToString()));FillOrdersInGrid();您没有为网格设置数据键的名称,但您的删除方法引用了DataKeys[e.RowIndex]我认为这是抛出异常的地方。在标记中设置DataKeyNames="OrderId"。以上就是C#学习教程:索引超出范围。它必须是一个非负数并且小于集合的大小。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: