在 Gridview 中选择一行并将其删除 - Asp.net

Posted

技术标签:

【中文标题】在 Gridview 中选择一行并将其删除 - Asp.net【英文标题】:Selecting a row in Gridview and deleting it - Asp.net 【发布时间】:2013-05-01 22:31:38 【问题描述】:

我有一个从 MS Access 数据库填充其数据的 gridview。我在gridview上启用了“选择”,并创建了一个删除按钮。我想在gridview上选择一行并在按下删除按钮时从gridview以及数据库中删除数据。以下是我尝试的代码,但它不起作用。

我得到的错误是“对象引用未设置为对象的实例”,代码行显示“myDataSet.Tables[“Users”].Rows[i].Delete();”

Web服务方法: //修改数据库

[WebMethod]
public string DatabaseUserModify(DataSet myDataset) 
 
 string database = "Provider=Microsoft.ACE.OLEDB.12.0;DataSource=|DataDirectory|/studentdb.accdb;Persist Security Info=True"; 
 OleDbConnection myConn = new OleDbConnection(database); 
 OleDbDataAdapter myDataAdapter = new OleDbDataAdapter("Select * from Users", 
myConn); 
OleDbCommandBuilder builder = new OleDbCommandBuilder(myDataAdapter); 
 builder.QuotePrefix = "["; 
 builder.QuoteSuffix = "]"; 
 myConn.Open(); 
 myDataAdapter.Update(myDataset, "Forum"); 
 myConn.Close(); 
return "done"; 
 

网站:

protected void DeleteButton(object sender, EventArgs e)

    Service myService = new Service();
    myDataSet = myService.AdminGetUserTable();

    int i = GridView1.SelectedIndex;
    myDataSet.Tables["Users"].Rows[i].Delete();//This is where I am getting error

    GridView1.DataSource = myDataSet;
    GridView1.DataBind();

    myService.DatabaseUserModify(myDataSet);

【问题讨论】:

应该很明显。在该行上设置一个断点,并在调用时检查什么是空的。在那之后你应该能够解决它。尝试让我们知道。 我认为您会在回发时将 myDataSet 设为 null。是吗?逐步确认它进入代码(断点)。由于 ASP.NET 页面是无状态的,它会丢失 myDataSet 对象值。 @MSI 我已经设置了断点,并且它在 "myDataSet.Tables["Users"]" 上给了我 null @Ali.NET 在 myDataSet.Tables["Users"] 上给我 null 【参考方案1】:

您的 myDataSet 可能在回发后丢失。您必须将 myDataSet 保存在页面的 ViewState 中,以便在回发时保留它的价值。像这样:

    public DataSet myDataSet 
    
        get 
         
            return ViewState["myDataSet"] != null ? (DataSet)ViewState["myDataSet"] : null; 
        
        set 
        
            ViewState["myDataSet"] = value;
        
    

但是,将大型数据/对象保存在 ViewState 中是一个最糟糕的主意。

【讨论】:

以上是关于在 Gridview 中选择一行并将其删除 - Asp.net的主要内容,如果未能解决你的问题,请参考以下文章

如何从数据库中选择数据并将其显示在gridview的新行上

手动从gridview绑定中删除一行?

GridView 问题

当用户在 GridView ASP.NET 中选择一行时如何自动选择相同 ID 的其他行

在 Web 应用程序中使用 C# 在 asp:GridView 中复制粘贴一行

Asp.net中GridView使用详解(引)