各位大哥。我是一个新手,刚学.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(); 



解决方案 »

  1.   

    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];-----------------------这样写太麻烦了---------------------------
    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]这样来的快也好看
      

  2.   

    没细看上面写反了 
    string bb= ((TextBox)e.Item.Cells[1].Controls[0]).Text.Trim().ToString();//名称
    string aa= ((TextBox)e.Item.Cells[2].Controls[0]).Text.Trim().ToString();//包装
      

  3.   

    <asp:BoundColumn DataField="FileName"                       <<ReadOnly="false">> HeaderText="FileName"></asp:BoundColumn>
    << ....>>改了就好了 楼上说的对 
      

  4.   

    把你的 readonly="true" 全部都删除了...