我用一个datalist做了一个编辑数据库数据的例子,主要后台代码如下:
private void Page_Load(object sender, System.EventArgs e)
{
if (!IsPostBack)
this.mybind();
}private void DataList1_CancelCommand(object source, System.Web.UI.WebControls.DataListCommandEventArgs e)
{
DataList1.EditItemIndex=-1;
this.mybind();
}
private void DataList1_UpdateCommand(object source, System.Web.UI.WebControls.DataListCommandEventArgs e)
{
int index = (int)DataList1.DataKeys[e.Item.ItemIndex];
TextBox newName=(TextBox)e.Item.FindControl("企业名称");
TextBox newMaster=(TextBox)e.Item.FindControl("法人代表");
string oleconn= "update 企业明细表 set 企业名称='"+newName.Text+"',法人代表='"+newMaster.Text+"' where ID="+index.ToString();
OleDbConnection conn2= new OleDbConnection(ConfigurationSettings.AppSettings["DataBaseCon"].ToString());
OleDbCommand cmd = new OleDbCommand(oleconn,conn2);
conn2.Open();
try
{
cmd.ExecuteNonQuery();
DataList1.EditItemIndex=-1;
this.mybind();
}
catch(Exception err)
{
Response.Write(err.ToString());
}
finally
{
conn2.Close();
}
}private void DataList1_EditCommand(object source, System.Web.UI.WebControls.DataListCommandEventArgs e)
{
DataList1.EditItemIndex=e.Item.ItemIndex;
this.mybind();
}
private void mybind()
{
OleDbConnection conn=new OleDbConnection(ConfigurationSettings.AppSettings["connStr"].ToString());
OleDbDataAdapter da=new OleDbDataAdapter("select * from 企业明细表",conn);
DataSet ds=new DataSet();
try
{
da.Fill(ds,"企业明细表");
DataList1.DataSource = ds.Tables["企业明细表"];
DataList1.DataBind(); }
catch(Exception error)
{
Response.Write(error.ToString());
}
}
运行条时候错误提示如下:
索引超出范围。必须为非负值并小于集合大小。参数名: index
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.ArgumentOutOfRangeException: 索引超出范围。必须为非负值并小于集合大小。参数名: index源错误:
行 60: private void DataList1_UpdateCommand(object source, System.Web.UI.WebControls.DataListCommandEventArgs e)
行 61: {
行 62: int index = (int)DataList1.DataKeys[e.Item.ItemIndex];
行 63: TextBox newName=(TextBox)e.Item.FindControl("企业名称");
行 64: TextBox newMaster=(TextBox)e.Item.FindControl("法人代表");
源文件: c:\inetpub\wwwroot\newdiy\webform3.aspx.cs 行: 62
问题出在哪里了?
private void Page_Load(object sender, System.EventArgs e)
{
if (!IsPostBack)
this.mybind();
}private void DataList1_CancelCommand(object source, System.Web.UI.WebControls.DataListCommandEventArgs e)
{
DataList1.EditItemIndex=-1;
this.mybind();
}
private void DataList1_UpdateCommand(object source, System.Web.UI.WebControls.DataListCommandEventArgs e)
{
int index = (int)DataList1.DataKeys[e.Item.ItemIndex];
TextBox newName=(TextBox)e.Item.FindControl("企业名称");
TextBox newMaster=(TextBox)e.Item.FindControl("法人代表");
string oleconn= "update 企业明细表 set 企业名称='"+newName.Text+"',法人代表='"+newMaster.Text+"' where ID="+index.ToString();
OleDbConnection conn2= new OleDbConnection(ConfigurationSettings.AppSettings["DataBaseCon"].ToString());
OleDbCommand cmd = new OleDbCommand(oleconn,conn2);
conn2.Open();
try
{
cmd.ExecuteNonQuery();
DataList1.EditItemIndex=-1;
this.mybind();
}
catch(Exception err)
{
Response.Write(err.ToString());
}
finally
{
conn2.Close();
}
}private void DataList1_EditCommand(object source, System.Web.UI.WebControls.DataListCommandEventArgs e)
{
DataList1.EditItemIndex=e.Item.ItemIndex;
this.mybind();
}
private void mybind()
{
OleDbConnection conn=new OleDbConnection(ConfigurationSettings.AppSettings["connStr"].ToString());
OleDbDataAdapter da=new OleDbDataAdapter("select * from 企业明细表",conn);
DataSet ds=new DataSet();
try
{
da.Fill(ds,"企业明细表");
DataList1.DataSource = ds.Tables["企业明细表"];
DataList1.DataBind(); }
catch(Exception error)
{
Response.Write(error.ToString());
}
}
运行条时候错误提示如下:
索引超出范围。必须为非负值并小于集合大小。参数名: index
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.ArgumentOutOfRangeException: 索引超出范围。必须为非负值并小于集合大小。参数名: index源错误:
行 60: private void DataList1_UpdateCommand(object source, System.Web.UI.WebControls.DataListCommandEventArgs e)
行 61: {
行 62: int index = (int)DataList1.DataKeys[e.Item.ItemIndex];
行 63: TextBox newName=(TextBox)e.Item.FindControl("企业名称");
行 64: TextBox newMaster=(TextBox)e.Item.FindControl("法人代表");
源文件: c:\inetpub\wwwroot\newdiy\webform3.aspx.cs 行: 62
问题出在哪里了?
解决方案 »
- gridview !! 急!!
- vs2008 新建项目就会自动退出
- ie7如何弹出无工具栏、无地址栏、不可复制窗口?
- vs2005在发布网站时,生成的dll文件的文件名是随机生成的,日后更新网站是不是很麻烦?
- asp.net多条件查询的问题
- asp.net做的BBS,怎么显示回复,用什么控件好!?急......
- 求助:关于ASP.NET中综合搜索引擎的问题··
- 这个问题很简单啊,为什么没人知道?
- .net 按钮添加控件问题
- 关于asp.net的薪水问题??
- 十万火急!!请都各位高手datagrid的分页问题
- 下列信息有助于确定程序集“Dottext.Common”无法加载的原因。错误解决方案~!
<asp:Button id="update" runat="server" Text="更新" CommandName="update"></asp:Button>
<asp:Button id="update" runat="server" Text="更新" CommandName="update"></asp:Button>里面的CommandName参数是错误的,必须区分大小写
<asp:Button id="update" runat="server" Text="更新" CommandName="Update"></asp:Button>其次,你没有定义主键,在这一句
DataList1.DataSource = ds.Tables["企业明细表"];
下面,你应当
DataList1.DataKeyField = "你的主键名";
未将对象引用设置到对象的实例。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。源错误:
行 63: TextBox newName=(TextBox)e.Item.FindControl("企业名称");
行 64: TextBox newMaster=(TextBox)e.Item.FindControl("法人代表");
行 65: string oleconn= "update 企业明细表 set 企业名称='"+newName.Text+"',法人代表='"+newMaster.Text+"' where ID="+index.ToString();
行 66: OleDbConnection conn2= new OleDbConnection(ConfigurationSettings.AppSettings["DataBaseCon"].ToString());
行 67: OleDbCommand cmd = new OleDbCommand(oleconn,conn2);
源文件: c:\inetpub\wwwroot\newdiy\webform3.aspx.cs 行: 65
哪里错了?
int index = (int)DataList1.DataKeys[e.Item.ItemIndex];
你还是应该这样:
string index = DataList1.DataKeys[e.Item.ItemIndex];
你的出错信息表明,你取到了一个错误的值.如果你真的设置了主键,那么是不会出现这样的问题的.