C# 从动态Gridview中删除项

C# 从动态Gridview中删除项,c#,.net,asp.net,gridview,sqldatasource,C#,.net,Asp.net,Gridview,Sqldatasource,我有一个从oracle数据库中提取数据的动态gridview <asp:GridView ID="gvData" OnRowDataBound="gvData_RowDataBound" OnPreRender="gvData_PreRender" OnSelectedIndexChanged="gvData_SelectedIndexChanged" OnLoad="gvData_Load" OnRowCommand="gvData_RowCommand" runat="server"

我有一个从oracle数据库中提取数据的动态gridview

<asp:GridView ID="gvData" OnRowDataBound="gvData_RowDataBound" OnPreRender="gvData_PreRender" OnSelectedIndexChanged="gvData_SelectedIndexChanged" OnLoad="gvData_Load" OnRowCommand="gvData_RowCommand" runat="server" CellPadding="4" ForeColor="#333333" AllowPaging="True" AutoGenerateDeleteButton="True" AutoGenerateEditButton="True" DataSourceID="DS" AllowSorting="True" AutoGenerateSelectButton="True" PageSize="10" ShowFooter="True">
        <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
        <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
        <PagerStyle BackColor="#284775" ForeColor="White" />
        <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
        <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
        <EditRowStyle BackColor="#CCCCCC" />
        <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
    </asp:GridView>
    <asp:SqlDataSource ID="DS" runat="server">
    </asp:SqlDataSource>

我不知道如何从gridview中获取值。有什么建议吗?谢谢

首先,您需要在主键列的gridview中提到
DataKeyName
,然后您可以访问gridview中选定行的值,如<代码>e.Keys[“DataKeyName”]

如果你想访问一个非关键字段,那么它应该像<代码>e.Values[“FieldName”]


提到DataKeyName,比如<代码>您需要为GridView设置DataKeyName

然后可以使用GridViewDeleteEventArgs获取Keys属性。这将是一个键/值对字典,对应于您设置的DataKeyFields。本质上,它允许您获取主键——这是您需要删除的内容

假设主键是PROBLEM\u DEPTH\u MD、API和BUS\u are\u ID,则可以将datakeyname设置为“PROBLEM\u DEPTH\u MD、API和BUS\u are\u ID”

然后,您可以使用e.keys在删除事件中获取这些密钥。如果您在它们上循环,您应该能够获得添加参数的值

以下是有关这方面的更多信息:

我在哪里设置DataKeyName?如果我的主键由多列组成怎么办?你可以用逗号分隔:)我在gridview和DS.DeleteParameters.Add中添加了DataKeyName=“PROBLEM\u DEPTH\u MD,API,BUS\u AREA\u ID”。添加(新参数(“PROBLEM\u DEPTH\u MD”,TypeCode.String,e.Keys[“PROBLEM\u DEPTH\u MD”]。ToString());对于代码,我得到了“ORA-01036:非法变量名/编号”,您介意帮我更新语句吗?比如说,我写了“更新表集字段='73i',其中PK1=:PK1和PK2=:PK2和PK3=:PK3”。最后我得到了一个错误“ORA-01036:非法变量名/编号”“.你知道问题出在哪里吗?好吧,我有点困惑。我在DataKeyNames中添加了一列。当我在那里再添加两列时,我如何将所有这些参数添加到DELETE语句中?我认为你在上面的评论中所做的方式——但是你的sql语句“WHERE PROBLEM_DEPTH_MD=:PROBLEM_DEPTH_MD”是否存在问题——应该有空格?我接受穆罕默德·阿克塔的回答;他提前两分钟回答。抱歉:(但非常感谢您的帮助!没问题——我也读了他的评论——它们非常有用。您介意帮我处理UPDATE语句吗?比如说,我写了“UPDATE table SET field='73i',其中PK1=:PK1和PK2=:PK2和PK3=:PK3”。最后我得到一个错误“ORA-01036:非法变量名/数”“.你知道问题出在哪里吗?
protected void gvData_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
    DS.DeleteCommand =
            "DELETE FROM TABLE " +
            "WHERE PROBLEM_DEPTH_MD = :PROBLEM_DEPTH_MD";
            "AND API = :API " +
            "AND BUS_AREA_ID = :BUS_AREA_ID";
    DS.DeleteParameters.Add(new Parameter("PROBLEM_DEPTH_MD", TypeCode.String, ??GridViewItemValue??));
}