【问题标题】:Asp.Net C# Delete row from dataTable gridview on button clickAsp.Net C#在按钮单击时从dataTable gridview中删除行
【发布时间】:2016-02-16 16:40:35
【问题描述】:

我正在显示一个数据表,该数据表从数据库中选择了许多元素(IncomingsId、Type、Cost、Frequency),但我不确定单击按钮时如何删除一行。 到目前为止,我已经尝试了很多解决方案,但没有任何效果。

这是我在网格视图中的按钮

<asp:TemplateField HeaderText="Delete">  
         <ItemTemplate>  
            <asp:button id="DeleteRowButton" text="Delete Record" onclick="DeleteRowButton_Click" runat="server"/>
         </ItemTemplate>  
     </asp:TemplateField> 

这是我正在创建数据表的页面背后的代码。

 SqlConnection con;

    public _Default()
    {
        con = new SqlConnection(@"MySQLConnection");
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            DisplayRecord();
        }
    }

    public DataTable DisplayRecord()
    { 
        string userId = (HttpContext.Current.User.Identity.GetUserId());

            SqlDataAdapter Adp = new SqlDataAdapter("select * from Incomings where AspNetUsersId = '" + userId +"'", con);

        DataTable Dt = new DataTable();

        Dt.AcceptChanges();
        Adp.Fill(Dt);
            grid1.DataSource = Dt;
            grid1.DataBind();
     return Dt;
    }

    public void DeleteRowButton_Click(object sender, EventArgs e)
    {

    }

提前欢呼任何帮助。我确定这是一个简单的解决方案

【问题讨论】:

  • 什么不起作用? DeleteRowButton_Click 在你调试的时候会被命中吗?
  • 是的,当我点击它时,按钮会起作用我只是不确定它后面的代码

标签: c# asp.net gridview datatable


【解决方案1】:

您需要一种方法让您的代码知道要删除哪个 ID。这是我通常的做法:

将您的按钮替换为ItemTemplate,并在此处添加按钮:

    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:Button Text="Delete" runat="server" CommandArgument='<%# Eval("userId") %>' CommandName="Delete" />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>

当您以这种方式拥有按钮时,您现在可以访问CommandArgumentCommandName 属性。请注意,我传递的参数是Eval("userId"),命令名称(您将在后面看到)用于识别您要执行的操作(这可以是任何东西,只是一个名称)。

CommandArgument 替换为您想要传递给服务器的任何值,使用来自数据库/数据源的名称(我猜它是 userId)。

然后,要捕获这个你需要实现 GridView 的RowCommand 事件,并拦截正确的CommandName

public void GridView1_RowCommand(Object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName == "Delete")
    {
        string userId = e.CommandArgument.ToString();
        //do something with the id
    }
}

在这里,您必须确保按钮中的 CommandName 与您要在 RowCommand 中执行的任何操作相匹配。这应该可以解决问题。

不要忘记将事件绑定到您的 GridView:

<asp:GridView OnRowCommand="GridView1_RowCommand" ID="GridView1" runat="server">
   ...
</asp:GridView>

【讨论】:

  • 感谢您的帮助。我想知道我应该在字符串 userId = e.CommandArgument.ToString(); 下添加什么从数据库中删除该行?提前谢谢你
  • 您的意思是删除该行?
  • 是的,删除该行,这将从数据库中删除它
  • 创建一个适配器(就像您选择时所拥有的一样),使用类似DELETE FROM MyTable WHERE UserId=@UserId 的东西创建一个SqlCommand,将参数添加到命令中。将适配器的DeleteCommand设置为这个SqlCommand,然后执行。
【解决方案2】:

只用这个作为前端代码

    <asp:GridView ID="grid1" OnRowDeleting="OnRowDeleting" DataKeyNames="deleteR" runat="server" AutoGenerateColumns="False"  CellPadding="4"  GridLines="None" style="width:100%"  >  

 <columns>  

    <asp:TemplateField HeaderText="Delete Row">
        <ItemTemplate>
            <asp:Button ID="btnDelete" runat="server" class="btn btn-primary" Text="Delete"  CommandName="Delete" OnRowDataBound="OnRowDataBound" />
        </ItemTemplate>
    </asp:TemplateField>

还有这个在后面:

 protected void OnRowDeleting(object sender, GridViewDeleteEventArgs e)
    {
        int deleteR= Convert.ToInt32(grid1.DataKeys[e.RowIndex].Values[0]);
       //have a sql statement here that add's the parameter ID for the row you want to delete, something like
SqlCommand com  = new SqlCommand ("Delete FROM yourdatabase Where yourID = @yourID"
com.Parameters.AddWithValue("@yourID", yourID)
    }

【讨论】:

  • 这实际上与我最终得到的非常相似。谢谢!
【解决方案3】:

您正在寻找的确实是一个简单的解决方案。
您可以使用 foreach 循环在 DataTable 中的所有 DataRows 中搜索某种 ID。
这是我的意思的一个示例:

String s = "/* IncomingsId for what you want to delete */";
foreach (DataRow r in dt.Rows) {
    if (r["IncomingsId"].ToString().Equals(s)) {
        dt.Rows.Remove(r);
    }
}

【讨论】:

    【解决方案4】:

    只是对任何帮助过我的人的快速更新,感谢您的建议。 Asp.Net 有它自己的内置 AutoGenerateDeleteButton,我将其设置为 true 并在其后面运行了一些代码。 一个简单的解决方案,真的不应该花我一整天的时间来完成!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多