从未在gridview上显示的网格视图中提取数据库信息

时间:2009-05-12 12:37:16

标签: asp.net sql-server vb.net gridview

我创建了一个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)。

提前感谢您的帮助:)

2 个答案:

答案 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;