【问题标题】:Delete Item From Dynamic Gridview从动态网格视图中删除项目
【发布时间】:2011-07-11 18:07:59
【问题描述】:

我有一个动态网格视图,其中包含从 oracle 数据库中提取的数据。

<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>

我正在尝试编写 DELETE/UPDATE 语句。我在从 gridview 获取值并将它们添加到参数 os SQL 语句时遇到问题。

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??));
}

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

【问题讨论】:

    标签: c# .net asp.net gridview sqldatasource


    【解决方案1】:

    首先,您需要在主键列的 gridview 中提及 DataKeyName,然后您可以访问 Gridview 的 Selected 行的值,例如...e.Keys["DataKeyName"]

    如果你想访问一个非关键字段,那么它应该像...e.Values["FieldName"]

    提及 DataKeyName 喜欢...&lt;asp:GridView ID="gvData" DataKeyNames="PrimaryKeyColumn"

    【讨论】:

    • 在哪里设置 DataKeyName?
    • 如果我的主键由多列组成怎么办?
    • 你可以用逗号分隔:)
    • 我将 DataKeyNames="PROBLEM_DEPTH_MD,API,BUS_AREA_ID" 添加到 gridview 和 DS.DeleteParameters.Add(new Parameter("PROBLEM_DEPTH_MD", TypeCode.String, e.Keys["PROBLEM_DEPTH_MD"].ToString ()));到代码,我得到“ORA-01036:非法变量名/编号”
    • 您介意帮我处理 UPDATE 语句吗?说,我写“”UPDATE table SET field = '73i' WHERE PK1 = :PK1 AND PK2 = :PK2 AND PK3= :PK3”。最后我得到一个错误“ORA-01036:非法变量名/编号”。你知道问题可能是什么吗?
    【解决方案2】:

    您需要为您的 GridView 设置 DataKeyNames。

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

    假设主键是 PROBLEM_DEPTH_MD、API 和 BUS_ARE_ID,您可以将 DataKeyNames 设置为“PROBLEM_DEPTH_MD,API,AND BUS_ARE_ID”。

    然后您可以使用 e.Keys 在删除事件中获取这些键。如果你遍历它们,你应该能够获取值来添​​加你的参数。

    以下是有关此的更多信息: http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.datakeynames.aspx

    【讨论】:

    • 好吧,我在这里有点困惑。我通过向 DataKeyNames 添加单列来实现它。当我在那里再添加两列时,如何将所有这些参数添加到 DELETE 语句中?
    • 我认为你在上面的评论中的做法是我在上面的评论中所做的——但是你的 sql 语句“WHERE PROBLEM_DEPTH_MD = :PROBLEM_DEPTH_MD”是否有问题——应该有空格吗?
    • 我接受 Muhammad Akhtar 的回答;他提前2分钟回答。抱歉:(但非常感谢您的帮助!
    • 没问题——我也读过他的 cmets——他们很有帮助。
    • 您介意帮我处理 UPDATE 语句吗?说,我写“”UPDATE table SET field = '73i' WHERE PK1 = :PK1 AND PK2 = :PK2 AND PK3= :PK3”。最后我得到一个错误“ORA-01036:非法变量名/编号”。你知道问题可能是什么吗?
    猜你喜欢
    • 2014-07-06
    • 1970-01-01
    • 2011-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-04
    • 2021-01-29
    相关资源
    最近更新 更多