gridview删除问题。无法从gridview删除按钮中删除SQL记录

时间:2015-07-02 15:31:48

标签: c# asp.net gridview

尽管我尝试理解gridview的删除方法,但我还是无法弄清楚如何删除一行。我使用相同的gridview来显示4个SQL表。根据选择的表,我进入swich case以更改SQLDataSource的SELECT和DELETE命令。我不确定这是最好的做法,但SELECT部分​​是否有效。

这是删除部分,我需要一些帮助。

  1. 我的思维过程是否正确如何实现我的目标?
  2. 我必须有OnRowDeleting =“gv1_RowDeleting”,否则它给了我一个 错误。这是强制性的。
  3. 我的代码不起作用是什么?
  4. .ASPX:

       switch (strType)
        {
            case "servers":
                DS.SelectCommand = "SELECT * FROM tbServers";
                DS.DeleteCommand = "DELETE FROM tbServers WHERE id = @id";
                strListTitle = "Server List";
                break;
            case "systems":
                DS.SelectCommand = "SELECT * FROM tbSystems";
                DS.DeleteCommand = "DELETE FROM tbSystems WHERE id = @id";
                strListTitle = "System List";
                break;
            case "itOwners":
                DS.SelectCommand = "SELECT * FROM tbITowners";
                DS.DeleteCommand = "DELETE FROM tbITowners WHERE id = @id";
                strListTitle = "IT Owner List";
                break;
            case "systemOwners":
                DS.SelectCommand = "SELECT tbSystemOwners.id, tbITowners.owner, tbSystems.Systems FROM tbITowners INNER JOIN tbSystemOwners ON tbITowners.id = tbSystemOwners.idITowners INNER JOIN tbSystems ON tbSystemOwners.idSytems = tbSystems.id";
                DS.DeleteCommand = "DELETE FROM tbSystemOwners WHERE id = @id";
                strListTitle = "System Owner List";
                break;
            default:
                break;
        }
        gv1.DataSource = DS;
        gv1.DataBind();
    }
    
    protected void gv1_deleteItem(object sender, GridViewDeletedEventArgs e)
    {
        // Display whether the delete operation succeeded.
        if (e.Exception == null)
        {
           Response.Write( "Row deleted successfully.");
        }
        else
        {
           Response.Write("An error occurred while attempting to delete the row.");
           e.ExceptionHandled = true;
        }
    }
    
     protected void gv1_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
    
    }
    

    .CS文件:

    <style name="CreditCardInputField" parent="parentStyle">
        <item name="android:layout_margin">10dp</item>
        <item name="android:background">@drawable/border</item>
        <item name="android:textStyle">bold|italic</item>
    </style>
    

1 个答案:

答案 0 :(得分:1)

重新:#3 我认为问题在于您使用Parameter类作为删除参数。参数类是一个不包含你想要的信息的基类 - 它不会从点击删除按钮的行中获取ID,这将不会得到传递给delete命令,我假设你得到一个SQL异常。 (或者你可能会得到一个不同的错误,因为它试图传递两个id参数,并且无法找到接受两个的函数。但是未经调查过)

如果删除删除参数,则将id设置为DataKeyName的事实意味着它应自动传递给您的删除命令。

以上信息不正确。除了具有自动生成删除按钮的DataKeyName之外,使用delete参数似乎不会导致任何问题。

实际问题是使用DataSource将GridView与SQLDataSource相关联,而不是DataSourceID。 DataSource不会在回发时持续存在,而DataSourceID则会。我并不完全确定幕后发生了什么,但是在页面生命周期中被抛出的DataSource搞砸了Delete方法调用,所以它永远不会发生。

简而言之,在使用控件作为数据源时使用DataSourceID属性,在使用对象(例如:DataTable)作为数据源时使用DataSource属性。