日期:2014-05-18  浏览次数:20658 次

GridView删除操作问题
在网页中使用了GridView控件,代码如下:
;<asp:GridView ID="MyGridView1" runat="server" AllowPaging="True" AutoGenerateColumns="False" Width="100%" DataKeyNames="UserID" OnPageIndexChanging="MyGrid_Page" height="100%" OnRowEditing="MyGrid_edit" OnRowDeleteing="MyGrid_delete">  
//以下是列的设置  
<Columns>
<asp:BoundField DataField="UserID" HeaderText="用户编号" />
<asp:BoundField DataField="UserName" HeaderText="用户姓名" />
<asp:BoundField DataField="UserPassword" HeaderText="用户密码" />  
   
<asp:TemplateField HeaderText="管理权限">  
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem,"NoAdmin").ToString()=="1"?"<font color=red>是</font>":"否" %>
</ItemTemplate>
</asp:TemplateField>
 //命令列设置  
<asp:CommandField ShowEditButton="True" ButtonType="link" />
<asp:CommandField ShowDeleteButton="True" ButtonType="link"/>  
   
</Columns> 
<PagerStyle HorizontalAlign="right"/>  
   
</asp:GridView>
在后台添加OnRowDeleteing="MyGrid_delete"的相应事件MyGrid_delete代码如下:
protected void MyGrid_delete(object sender, GridViewDeletedEventArgs e)
{
//创建删除指定ID的SQL语句
string Mystrsql = "delete from User where STUserID = @UserID";
//创建SQLcommand对象,对SQL语句进行操作
SqlCommand Mycmd = new SqlCommand(Mystrsql, Myconn);  
//添加参数
Mycmd.Parameters.Add(new SqlParameter("@UserID", SqlDbType.Int, 4));

**********************************************************************
//DataKeyNames该怎么添加参数?
Mycmd.Parameters["@UserID"].Value = MyGridView1.DataKeys[];
***********************************************************************

Mycmd.Connection.Open();
try
 {
  Mycmd.ExecuteNonQuery();
}
catch (SqlException)
 {
}
Mycmd.Connection.Close();
BindGrid();
 }
删除的操作怎么做?好多网上的资料斗看不懂-.-!请大家帮帮我


------解决方案--------------------
请用GridViewDeleteEventArgs事件.
而不是GridViewDeletedEventArgs 

http://blog.csdn.net/insus/archive/2008/03/30/2229898.aspx
------解决方案--------------------
e.Item.ItemIndex是DataGrid或是DataList的啦.
而GridView是e.RowIndex:

MyGridView1.DataKeys[e.RowIndex].Value.ToString();
------解决方案--------------------
我晕,代码都贴出来了,还说自己不会!

gridview1.DataKeys[e.RowIndex],这里的DataKeys是取自于在前台页面上的DataKeyNames所设置的 数据实体类的属性 或者数据库中的字段名;提示未将对象引用到实例,你去看看的DataKeyNames是不是设置的和你实体类的某个属性比如Id一样。

这里只是将实体类的Id像其他信息一样保存在了DataKeys中,方便后台作修改、删除时取值;DataKeys[][]是一个二重数组,第一个是所在行的索引,第二个是相对于DataKeyNames中的属性名的
比如在前台作设置:
<asp:GridView id="gvw" runat="Server" DataKeyNames="Id,Name">

后台访问: string Id = gvw.DataKeys[e.RowIndex]["Id"];

我想你的问题可能出在了前台 DataKeyNames的设置上,如果实在不行也可以在后台用代码作设置:
但要在Page_Load事件中设置,至少是在GridView 的RowCreate事件之前
string[] strs = {"Id","Name"};
gvw.DataKeyNames = strs