【问题标题】:Button in every Row of Gridview C# Asp.NETGridview C# Asp.NET 每一行中的按钮
【发布时间】:2015-07-31 16:12:29
【问题描述】:

在使用 C# 的 ASP.NET 中,我想在应该执行两个操作的 Gridview 的每一行中放置一个按钮

  1. 删除该行的记录。

  2. 从与该行相关的文件夹中删除图像。

我可以执行上述操作,但我想知道如何获取按钮的事件,以便该按钮仅适用于特定行?

【问题讨论】:

    标签: c# asp.net gridview


    【解决方案1】:
    <asp:GridView ID="GridView1" runat="server" OnRowDeleting="GridView1_RowDeleting">
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:Button ID="Button" Text="BUTTON" runat="server" CommandName="Delete" />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
    

    然后在 gridview RowDeleting Action 中,在代码后面的方法中,执行你的逻辑,它将为你拉入行。

     protected void GridView1_RowDeleting(object sender, GridViewDeletedEventArgs e)
        {    
             //ROW YOU ARE DELETING
             int rowindex = e.RowIndex;
            //Do your Delete Logic Here
        }
    

    【讨论】:

      【解决方案2】:

      实际问题是“我想知道如何获取按钮的事件,以便该按钮仅适用于特定行?”

      答案在这里: HTML

      <%@ Page Language="C#" EnableEventValidation="false"  AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="gridViewDeals.WebForm1" %>
      
      <!DOCTYPE html>
      
      <html xmlns="http://www.w3.org/1999/xhtml">
      <head runat="server">
          <title></title>
      </head>
      <body>
          <form id="form1" runat="server">
          <div>
              <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" >
                  <Columns>
                      <asp:TemplateField>
                          <ItemTemplate>
                              <asp:Label ID="LabelName" runat="server" Text=<%#Eval("Name") %>>></asp:Label>
                          </ItemTemplate>
                      </asp:TemplateField>
                      <asp:TemplateField>
                          <ItemTemplate>
                              <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
                          </ItemTemplate>
                      </asp:TemplateField>
                      </Columns>
              </asp:GridView>
          </div>
      
          </form>
      </body>
      </html>
      

      C# 代码背后:

      using System;
      using System.Collections.Generic;
      using System.Data;
      using System.Data.SqlClient;
      using System.Linq;
      using System.Web;
      using System.Web.UI;
      using System.Web.UI.WebControls;
      
      namespace gridViewDeals
      {
          public partial class WebForm1 : System.Web.UI.Page
          {
              protected void Page_Load(object sender, EventArgs e)
              {
                  if (!IsPostBack)
                  {
                      SqlConnection con = new SqlConnection("Data Source=HAMMADMAQBOOL;Initial Catalog=ModulesDB;Integrated Security=True;Connect Timeout=15;Encrypt=False;TrustServerCertificate=False");
                      con.Open();
                      SqlDataAdapter da = new SqlDataAdapter("Select * From GVDemo", con);
                      DataSet ds = new DataSet();
                      da.Fill(ds);
                      GridView1.DataSource = ds.Tables[0];
                      GridView1.DataBind();
                  }
              }
      
      
      
              protected void Button1_Click(object sender, EventArgs e)
              {
                  Button btn = (Button)sender;
                  GridViewRow gvr = (GridViewRow)btn.NamingContainer;
      
                  if (gvr.RowType == DataControlRowType.DataRow)
                  {
                      string Namme = (gvr.FindControl("LabelName") as Label).Text;
                      //Write Query here to Delete Data. . . 
                      //Call Functon Here to Delete the Image From Folder. . . 
                  }
      
              }
      
      
          }
      }
      

      【讨论】:

      • Dylan 的回答实际上更高效且更易于维护。你的,虽然它可能更抽象,但仍然只适用于你当前拥有的 GridView 按钮单击,但没有利用 GridViewEventArgs。这将使您不必强制转换容器和行类型。此外,如果您要引用“实际问题是......”,您可能不应该从原始帖子中删除“实际问题”(如您所说)。
      【解决方案3】:

      按钮有一个 CommandArgument 属性,您可以使用该属性来存储行 ID,然后在单击事件中的代码中使用代码获取它

      string RowID = (sender as Button).CommandArgument
      

      【讨论】:

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