【问题标题】:why the GridView RowDeleted event is not working with objectdatasource control?为什么 GridView RowDeleted 事件不适用于 objectdatasource 控件?
【发布时间】:2020-06-30 12:14:13
【问题描述】:

我将 rowDeleted 事件添加到我的代码中,以便在使用 AffectedRows Proparty 删除行但事件未触发时接收消息

1-这是使用的代码:

       ( protected void GridView1_RowDeleted(object sender, GridViewDeletedEventArgs e)
        {
            Label1.Visible = true;
            if(e.AffectedRows > 0)
            {
                Label1.Text = "the Row Deleted";
            }
        }

2- 这是我使用的 GrideView:

    <form id="form1" runat="server">
        <div>   
            <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="ObjectDataSource1">
                <Columns>
                    <asp:CommandField ShowDeleteButton="True" ShowEditButton="True" />
                    <asp:BoundField DataField="ID" HeaderText="ID" SortExpression="ID" ReadOnly="true" />
                    <asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" />
                    <asp:BoundField DataField="Education" HeaderText="Education" SortExpression="Education" />
                </Columns>
            </asp:GridView>
            <asp:Label ID="Label1" runat="server" Text="" Font-Bold="true"></asp:Label>
            <asp:Label ID="Label2" runat="server" Text="" Font-Bold="true"></asp:Label>
            <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="GetEmployees" TypeName="Employee_Mangment.Data.EmployeeDataAccess" UpdateMethod="UpdateEmployee" ConflictDetection="CompareAllValues" OldValuesParameterFormatString="Original_{0}" DeleteMethod="DeleteEmployee">
                <DeleteParameters>
                    <asp:Parameter Name="Original_ID" Type="Int32" />
                    <asp:Parameter Name="Original_Name" Type="String" />
                    <asp:Parameter Name="Original_Education" Type="String" />
                </DeleteParameters>
                <UpdateParameters>
                    <asp:Parameter Name="Original_ID" Type="Int32" />
                    <asp:Parameter Name="Original_Name" Type="String" />
                    <asp:Parameter Name="Original_Education" Type="String" />
                    <asp:Parameter Name="Name" Type="String" />
                    <asp:Parameter Name="Education" Type="String" />
                </UpdateParameters>
            </asp:ObjectDataSource>

        </div> 
    </form>

3-这是我的模型:

    public class Employee
    {
        public int ID { get; set; }
        public string Name { get; set; }

        public string Education { get; set; }
    }

4-这是我的数据访问层:

    public class EmployeeDataAccess
    {
        public static List<Employee> GetEmployees()
        {
            List<Employee> employees = new List<Employee>();

            string cs = ConfigurationManager.ConnectionStrings["Sample"].ConnectionString;

            using (SqlConnection con = new SqlConnection(cs))
            {
                con.Open();
                SqlCommand cmd = new SqlCommand()
                {
                    CommandText = "select ID,Name,EducationType from Employee join Education on EduID = EducationID",
                    Connection = con
                };

                using (SqlDataReader rdr = cmd.ExecuteReader())
                {
                    while (rdr.Read())
                    {
                        Employee employee = new Employee()
                        {
                            ID = Convert.ToInt32(rdr["ID"]),
                            Name = rdr["Name"].ToString(),
                            Education = rdr["EducationType"].ToString(),
                        };

                        employees.Add(employee);
                    }
                }

                return employees;

            }
        }

        public static void UpdateEmployee( int Original_ID, string Original_Name ,string Original_Education , string Name , string Education)
        {
            string cs = ConfigurationManager.ConnectionStrings["Sample"].ConnectionString;

            using (SqlConnection con = new SqlConnection(cs)) 
            {
                con.Open();

                SqlCommand cmd = new SqlCommand()
                {
                    CommandText = "_try",
                    Connection = con
                };

                cmd.CommandType = CommandType.StoredProcedure;

                SqlParameter parameterOginalID = new SqlParameter("@Original_ID", Original_ID);
                cmd.Parameters.Add(parameterOginalID);

                SqlParameter parameterOginalName = new SqlParameter("@Original_Name", Original_Name);
                cmd.Parameters.Add(parameterOginalName);

                SqlParameter parameterOginalEducation = new SqlParameter("@Original_Education", Original_Education);
                cmd.Parameters.Add(parameterOginalEducation);

                SqlParameter ParameterName = new SqlParameter("@Name", Name);
                cmd.Parameters.Add(ParameterName);

                SqlParameter parameterEducation = new SqlParameter("@Education", Education);
                cmd.Parameters.Add(parameterEducation);

                cmd.ExecuteNonQuery();

            }
        }

        public static void DeleteEmployee(int Original_ID, string Original_Name ,string Original_Education)
        {
            string cs = ConfigurationManager.ConnectionStrings["Sample"].ConnectionString;

            using (SqlConnection con = new SqlConnection(cs))
            {
                con.Open();

                SqlCommand cmd = new SqlCommand()
                {
                    CommandText = "delete from Employee where ID = @Original_ID  and Name = @Original_Name and EducationID = (select EduID from Education where EducationType = @Original_Education)",
                    Connection = con
                };


                SqlParameter OginalID = new SqlParameter("@Original_ID", Original_ID);
                cmd.Parameters.Add(OginalID);

                SqlParameter OginalName = new SqlParameter("@Original_Name", Original_Name);
                cmd.Parameters.Add(OginalName);

                SqlParameter OginalEducation = new SqlParameter("@Original_Education", Original_Education);
                cmd.Parameters.Add(OginalEducation);

                cmd.ExecuteNonQuery();

            }
        }
    }

5-这里是_try Stored Prosedure:

CREATE proc [dbo].[_try] (@Original_ID int, @Name varchar(100),@Education varchar(100),@Original_Name varchar(100),@Original_Education varchar(100))
as
begin
    update Employee set Name = @Name ,EducationID = (select EduID from Education where EducationType = @Education) where ID = @Original_ID and Name = @Original_Name and EducationID = (select EduID from Education where EducationType = @Original_Education)
End

我需要知道导致 RowDeleted 不触发的问题是什么

【问题讨论】:

    标签: asp.net asp.net-mvc asp.net-mvc-4 webforms


    【解决方案1】:

    您忘记将事件处理程序与 .aspx 文件中 &lt;asp:GridView&gt; 标记中的事件关联起来。 应该是这样的&lt;asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="ObjectDataSource1" **OnRowDeleted="GridView1_RowDeleted**&gt;

    【讨论】:

      【解决方案2】:

      您错过了 GridView 标记处的删除事件:

      OnRowDeleting="GridView1_RowDeleting"
      

      所以您的 GridView 代码应该如下所示:

      <asp:GridView OnRowDeleting="GridView1_RowDeleting" ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="ObjectDataSource1">
          <Columns>
              <asp:CommandField ShowDeleteButton="True" ShowEditButton="True" />
              <asp:BoundField DataField="ID" HeaderText="ID" SortExpression="ID" ReadOnly="true" />
              <asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" />
              <asp:BoundField DataField="Education" HeaderText="Education" SortExpression="Education" />
          </Columns>
      </asp:GridView>
      

      在后面的代码中,应该有一个为此创建的事件处理程序:

      public partial class WebForm1 : System.Web.UI.Page
      {
          protected void Page_Load(object sender, EventArgs e)
          {
      
          }
      
          protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
          {
      
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-27
        • 2012-01-23
        • 2017-06-22
        • 1970-01-01
        • 2020-05-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多