各位大哥。我是一个新手,刚学.NET,在学习过程中碰到一点问题!
当点击“编辑”时提示“指定的参数已超出有效值的范围。参数名: index”错误!
我想要的结果是:当点击“编辑”时。对应数据库中的值就会出现在TEXTBOX中。然后点击”更新“
便可修改!
这是webform1.aspx<asp:datagrid id="DataGrid1" runat="server" AutoGenerateColumns="False" DataKeyField="ID"
PageSize="5" AllowPaging="True" Width="800px">
<Columns>
<asp:TemplateColumn HeaderText="序号">
<ItemTemplate>
<%# (DataGrid1.PageSize * DataGrid1.CurrentPageIndex) + Container.ItemIndex +1 %>
</ItemTemplate>
</asp:TemplateColumn><asp:BoundColumn DataField="id" ReadOnly="True" HeaderText="id"></asp:BoundColumn>
<asp:BoundColumn DataField="Title" ReadOnly="True" HeaderText="Title"></asp:BoundColumn>
<asp:BoundColumn DataField="FileName" ReadOnly="True" HeaderText="FileName"></asp:BoundColumn>
<asp:BoundColumn DataField="PostTime" ReadOnly="True" HeaderText="PostTime"></asp:BoundColumn>
<asp:BoundColumn DataField="Status" ReadOnly="True" HeaderText="Status"></asp:BoundColumn>
<asp:EditCommandColumn ButtonType="LinkButton" UpdateText="更新" HeaderText="编辑" CancelText="取消" EditText="编辑"></asp:EditCommandColumn>
<asp:ButtonColumn Text="删除" HeaderText="删除" CommandName="Delete"></asp:ButtonColumn>
<asp:HyperLinkColumn Text="详细资料" HeaderText="详细资料"></asp:HyperLinkColumn>
</Columns>
<PagerStyle NextPageText="下一页" PrevPageText="上一页" HorizontalAlign="Right" ForeColor="#4A3C8C" BackColor="#E7E7FF"></PagerStyle>
</asp:datagrid>这是webform1.aspx.cs
//
// 更新
//
private void DataGrid1_UpdateCommand(object source, DataGridCommandEventArgs e)
{
string upStr="UPDATE BBS SET Title=@Title WHERE ID=@id"; SqlCommand upCmd=new SqlCommand(upStr,sqlConnection1);
upCmd.Parameters.Add("@Title",SqlDbType.VarChar,50);
upCmd.Parameters.Add("@id",SqlDbType.Int,2); upCmd.Parameters[1].Value = ((TextBox) e.Item.Cells[1].Controls[0]).Text; //此行报错
upCmd.Parameters[2].Value = this.DataGrid1.DataKeys[e.Item.ItemIndex];
try
{
sqlConnection1.Open();
upCmd.ExecuteNonQuery();
sqlConnection1.Close();
if(!Page.IsStartupScriptRegistered("upAlert"))
{
Page.RegisterStartupScript("upAlert",@"<script language='javascript'>alert('更新成功')</script>");
}
this.DataGrid1.EditItemIndex = -1;
InitializeComponent();
}
catch(Exception err)
{
Response.Write(err.Message);
}
finally
{
if(sqlConnection1.State == ConnectionState.Open)
{
sqlConnection1.Close();
}
}
}
当点击“编辑”时提示“指定的参数已超出有效值的范围。参数名: index”错误!
我想要的结果是:当点击“编辑”时。对应数据库中的值就会出现在TEXTBOX中。然后点击”更新“
便可修改!
这是webform1.aspx<asp:datagrid id="DataGrid1" runat="server" AutoGenerateColumns="False" DataKeyField="ID"
PageSize="5" AllowPaging="True" Width="800px">
<Columns>
<asp:TemplateColumn HeaderText="序号">
<ItemTemplate>
<%# (DataGrid1.PageSize * DataGrid1.CurrentPageIndex) + Container.ItemIndex +1 %>
</ItemTemplate>
</asp:TemplateColumn><asp:BoundColumn DataField="id" ReadOnly="True" HeaderText="id"></asp:BoundColumn>
<asp:BoundColumn DataField="Title" ReadOnly="True" HeaderText="Title"></asp:BoundColumn>
<asp:BoundColumn DataField="FileName" ReadOnly="True" HeaderText="FileName"></asp:BoundColumn>
<asp:BoundColumn DataField="PostTime" ReadOnly="True" HeaderText="PostTime"></asp:BoundColumn>
<asp:BoundColumn DataField="Status" ReadOnly="True" HeaderText="Status"></asp:BoundColumn>
<asp:EditCommandColumn ButtonType="LinkButton" UpdateText="更新" HeaderText="编辑" CancelText="取消" EditText="编辑"></asp:EditCommandColumn>
<asp:ButtonColumn Text="删除" HeaderText="删除" CommandName="Delete"></asp:ButtonColumn>
<asp:HyperLinkColumn Text="详细资料" HeaderText="详细资料"></asp:HyperLinkColumn>
</Columns>
<PagerStyle NextPageText="下一页" PrevPageText="上一页" HorizontalAlign="Right" ForeColor="#4A3C8C" BackColor="#E7E7FF"></PagerStyle>
</asp:datagrid>这是webform1.aspx.cs
//
// 更新
//
private void DataGrid1_UpdateCommand(object source, DataGridCommandEventArgs e)
{
string upStr="UPDATE BBS SET Title=@Title WHERE ID=@id"; SqlCommand upCmd=new SqlCommand(upStr,sqlConnection1);
upCmd.Parameters.Add("@Title",SqlDbType.VarChar,50);
upCmd.Parameters.Add("@id",SqlDbType.Int,2); upCmd.Parameters[1].Value = ((TextBox) e.Item.Cells[1].Controls[0]).Text; //此行报错
upCmd.Parameters[2].Value = this.DataGrid1.DataKeys[e.Item.ItemIndex];
try
{
sqlConnection1.Open();
upCmd.ExecuteNonQuery();
sqlConnection1.Close();
if(!Page.IsStartupScriptRegistered("upAlert"))
{
Page.RegisterStartupScript("upAlert",@"<script language='javascript'>alert('更新成功')</script>");
}
this.DataGrid1.EditItemIndex = -1;
InitializeComponent();
}
catch(Exception err)
{
Response.Write(err.Message);
}
finally
{
if(sqlConnection1.State == ConnectionState.Open)
{
sqlConnection1.Close();
}
}
}
解决方案 »
- 请教高手:递交表单添加记录时出错,提示“变量名 '@xxxx' 已声明。变量名在批查询或存储过程内部必须唯一。”
- ASP.NET缓存操作本地可以服务器上出现问题
- linq中的表连接语句???
- ASPX数据保存后立即返回值
- 各位大侠帮忙介绍基本比较好的书籍
- gridview模板中如何动态载入用户控件?
- 关于下拉框事件响应的问题
- 用什么软件来测试一段代码耗费多少资源?如果我做单IP访问量统计该怎么做?
- 救命那!为什么我的工程在服务器上总是不行?!!!!
- 初学Asp.net的疑问
- 一个.net中的脚本的问题?请高手指教 !
- <script runat="server" language="cs">和页面语言冲突怎么解决?
upCmd.Parameters.Add("@Title",SqlDbType.VarChar,50);
upCmd.Parameters.Add("@id",SqlDbType.Int,2); upCmd.Parameters[1].Value = ((TextBox) e.Item.Cells[1].Controls[0]).Text; //此行报错
upCmd.Parameters[2].Value = this.DataGrid1.DataKeys[e.Item.ItemIndex];-----------------------这样写太麻烦了---------------------------
string aa= ((TextBox)e.Item.Cells[1].Controls[0]).Text.Trim().ToString();//名称
string bb= ((TextBox)e.Item.Cells[2].Controls[0]).Text.Trim().ToString();//包装strig sql="update bbs set title='"+aa+"' where id='"+bb+"'"
SqlCommand upCmd=new SqlCommand(sql,sqlConnection1);
upCmd.ExecuteNonQuery();
这样不是很快 也方便看 要写存过就直接用SqlParameter [] arParams=new SqlParameter[int]这样来的快也好看
string bb= ((TextBox)e.Item.Cells[1].Controls[0]).Text.Trim().ToString();//名称
string aa= ((TextBox)e.Item.Cells[2].Controls[0]).Text.Trim().ToString();//包装
<< ....>>改了就好了 楼上说的对