我创建了一个Gridview控件,可以从我的数据库中提取一些数据,但不会显示我希望收集的所有信息。我选择不显示主键用于用户界面,但需要该键用于网格上的基本操作。
我目前正在尝试在表格中添加“删除”选项,但遗憾的是我的运气很少。这是我的.aspx文件。
<asp:GridView ID="ManagerList_GV" runat="server"
AutoGenerateColumns="False" AllowSorting="True"
DataKeyNames = "ManagerID" OnRowEditing="editManager"
OnRowDataBound="FormatManagers" CellPadding="3" >
<Columns>
<asp:BoundField HeaderText="Manager" DataField="FullName" />
<asp:BoundField HeaderText="Status" DataField="Status" />
<asp:CommandField EditText="Edit" ShowEditButton="True" />
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton Text="Delete" runat="server" CommandName="deleteRow" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
不幸的是,我不知道该为我的后端做些什么。我已经创建了我的存储过程和业务层子例程,但我不知道如何a)拉入刚刚单击的行然后b)访问该行的主键,因为我没有显示它(主键是ManagerID)。
提前感谢您的帮助:)
答案 0 :(得分:4)
我会创建一个按钮字段,但我认为模板字段也应该起作用:
<asp:ButtonField ButtonType="Link" Text="Delete" CommandName="Delete" />
然后你想要处理Gridview的RowDeleting事件:
Private Sub GridView1_RowDeleting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewDeleteEventArgs) Handles Gridview1.RowDeleting
Dim ManagerIdToDelete As Int32 = CType(CType(sender, GridView).DataKeys(e.RowIndex).Value, Int32)
'Now call your delete command with the id
End Sub
答案 1 :(得分:0)
添加一个显示主键的BoundColumn在设计视图中可见,但在数据绑定后,将PK设置为可见的列。
e.g。
<Columns>
<asp:BoundField HeaderText="PrimaryKey" DataField="ManagerID" />
<asp:BoundField HeaderText="Manager" DataField="FullName" />
....
</Columns>
服务器端:
ManagerList_GV.DataSource = ??;
ManagerList_GV.DataBind();
ManagerList_GV.Columns[0].Visible = false;
这是故意的,因此出于安全原因,PK不会存储在ViewState中。然后,您可以使用
添加RowDeleting事件并访问主键ManagerList_GV.Rows[e.RowIndex].Cells[0].Text;