2009-02-24 77 views
4

我有一个GridView就这样:ASP.NET - Gridview RowDeleting事件上没有Datakey!

<asp:GridView ID="gvwStudents" runat="server" 
    AutoGenerateColumns="False" DataKeyNames="ID" 
    ShowHeader="False" onrowdeleting="gvwStudents_RowDeleting"> 
    <Columns> 
     <asp:BoundField DataField="FirstName" /> 
     <asp:BoundField DataField="LastName" /> 
     <asp:BoundField DataField="Email" /> 
     <asp:CommandField ShowDeleteButton="True" DeleteText="Remove" /> 
    </Columns> 
</asp:GridView> 

这里是我如何创建我的DataTable,该GridView控件绑定到,让你知道我处理什么数据:

private DataTable MakeStudentsTable() 
{ 
    DataTable students = new DataTable(); 

    DataColumn ID = students.Columns.Add("ID", typeof(int)); 
    ID.AutoIncrement = true; 

    DataColumn firstName = students.Columns.Add("FirstName", typeof(string)); 
    DataColumn lastName = students.Columns.Add("LastName", typeof(string)); 
    DataColumn email = students.Columns.Add("Email", typeof(string)); 


    return students; 
} 

为什么哦,为什么没有在RowDeleting事件的EventArgs中传递键?我需要从ADO.NET DataTable中删除记录,这些记录是在触发此事件时保留在会话状态中的。

为什么不能正常工作? DataKeys仅在使用DataSource控件时才起作用吗?

+0

我想你应该在这个问题上加上“databinding”标签。 顺便说一句,我一直在抨击我的头在完全相同的问题。 – 2009-02-25 07:01:39

+0

你如何将学生添加到你的桌子?在调用Deleting方法之前(即在Page_Load中)数据是否填充到表中? – cjk 2009-02-25 11:50:45

回答

8

这工作:

private DataTable MakeStudentsTable() 
{ 
    DataTable students = new DataTable(); 

    DataColumn ID = students.Columns.Add("ID", typeof(int)); 
    ID.AutoIncrement = true; 

    DataColumn firstName = students.Columns.Add("FirstName", typeof(string)); 
    DataColumn lastName = students.Columns.Add("LastName", typeof(string)); 
    DataColumn email = students.Columns.Add("Email", typeof(string)); 

    DataRow student = students.NewRow(); 
    student["FirstName"] = "foo"; 
    student["LastName"] = "bar"; 
    student["Email"] = "[email protected]"; 
    students.Rows.Add(student); 

    return students; 
} 

protected void gvwStudents_RowDeleting(object sender, GridViewDeleteEventArgs e) 
{ 
    string id = this.gvwStudents.DataKeys[e.RowIndex].Value.ToString(); 
} 
0

添加

<asp:BoundField DataField="ID" /> 

,看看现场,甚至有一个值。

+0

我已经检查过这个。它确实有价值。 – 2009-02-24 23:51:53

相关问题