删除gridview中的记录后如何刷新所有标签?

时间:2014-04-01 01:11:02

标签: c# asp.net gridview webforms

在左侧,我有3个标签,根据数据库显示数据。我想每当我删除gridview中的记录时,标签都会自动刷新。我不想单击浏览器刷新按钮来刷新标签。我只想刷新标签。我已经创建了一个名为UpdateLabel()的方法,并将其放在grdEvent_RowUpdating中,它可以正常工作,每当我编辑时,它都会刷新标签。但是,如果我将UpdateLabel()方法放在grdEvent_RowDeleting中,它就不起作用,为什么?救命。帮助

点击gridview上的删除按钮,弹出

enter image description here

点击弹出窗口中的确定按钮。

enter image description here

点击刷新后,标签将刷新

enter image description here

protected void Page_Load(object sender, EventArgs e)
    {


        if (!IsPostBack)
        {
            UpdateLabels(); // Update labels without refreshing page

            string strConnString = ConfigurationManager.ConnectionStrings["ProjectConnectionString"].ConnectionString;
            string str;
            SqlCommand com;

            SqlConnection con = new SqlConnection(strConnString);
            con.Open();
            str = "select * from EVENT_ANNOUNCE where getdate() >= STARTDATE and cast(getdate() as Date) <= ENDDATE";
            com = new SqlCommand(str, con);
            SqlDataReader reader = com.ExecuteReader();



            var events = new List<string>();

            if (reader.HasRows)
            {
                while (reader.Read())
                    events.Add(reader["EVENTNAME"].ToString());
            }

            if (events.Count >= 1)
                lblEvent1.Text = events[0];
            if (events.Count >= 2)
                lblEvent2.Text = events[1];
            if (events.Count >= 3)
                lblEvent3.Text = events[2];

            reader.Close();
            con.Close();

        }


        if (Page.IsPostBack == false)
        {
            bindEventGridView();

        }



    }

    // Update labels without refreshing page
    public void UpdateLabels()
    {

        string strConnString = ConfigurationManager.ConnectionStrings["ProjectConnectionString"].ConnectionString;
        string str;
        SqlCommand com;

        SqlConnection con = new SqlConnection(strConnString);
        con.Open();
        str = "select * from EVENT_ANNOUNCE where getdate() >= STARTDATE and cast(getdate() as Date) <= ENDDATE";
        com = new SqlCommand(str, con);
        SqlDataReader reader = com.ExecuteReader();

        var events = new List<string>();

        if (reader.HasRows)
        {
            while (reader.Read())
                events.Add(reader["EVENTNAME"].ToString());
        }

        if (events.Count >= 1)
            lblEvent1.Text = events[0];
        if (events.Count >= 2)
            lblEvent2.Text = events[1];
        if (events.Count >= 3)
            lblEvent3.Text = events[2];

        reader.Close();
        con.Close();
    }

    protected void grdEvent_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
        // get row selected by user
        int selectedRow = e.RowIndex;
        int ID = (int)grdEvent.DataKeys[selectedRow].Value;
        // Delete Record
        deleteEventRecord(ID);
        UpdateLabels();
    }

    private void deleteEventRecord(int ID)
    {

        string strConnectionString =
                ConfigurationManager.ConnectionStrings["ProjectConnectionString"].ConnectionString;
        SqlConnection myConnect = new SqlConnection(strConnectionString);

        string strCommandText = "DELETE EVENT_ANNOUNCE WHERE ID=@ID";

        SqlCommand cmd = new SqlCommand(strCommandText, myConnect);
        cmd.Parameters.AddWithValue("ID", ID);

        myConnect.Open();
        int result = cmd.ExecuteNonQuery();

        if (result > 0)
        {
            lblSuccess.Visible = true;
            lblSuccess.Text = "Record deleted";
            lblError.Visible = false;
        }
        else
        {
            lblError.Visible = true;
            lblError.Text = "Update fail";
            lblSuccess.Visible = false;
        }

        bindEventGridView();
        myConnect.Close();

    }

    protected void grdEvent_RowEditing(object sender, GridViewEditEventArgs e)
    {
        grdEvent.EditIndex = e.NewEditIndex;
        bindEventGridView();
    }

    protected void grdEvent_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        int selectedRow = e.RowIndex;   //get selected row
        //  get product id from data key
        int id = (int)grdEvent.DataKeys[selectedRow].Value;

        //  get current grid view row
        GridViewRow row = (GridViewRow)grdEvent.Rows[selectedRow];
        TextBox eventtype = (TextBox)row.FindControl("txtEventType");
        //  find text box for txtPrice
        TextBox eventname = (TextBox)row.FindControl("txtEventName");
        TextBox startdate = (TextBox)row.FindControl("txtStartDate");
        TextBox enddate = (TextBox)row.FindControl("txtEndDate");
        //  Remove $ sign
        string strEventType = eventtype.Text;
        string strEventName = eventname.Text;
        string strStartDate = startdate.Text;
        string strEndDate = enddate.Text;
        DateTime datStartDate;
        DateTime datEndDate;
        if (DateTime.TryParseExact(strStartDate, new string[] { "dd/MM/yyyy" },
                               System.Globalization.CultureInfo.InvariantCulture,
                               System.Globalization.DateTimeStyles.None, out datStartDate)
    &&
    DateTime.TryParseExact(strEndDate, new string[] { "dd/MM/yyyy" },
                               System.Globalization.CultureInfo.InvariantCulture,
                               System.Globalization.DateTimeStyles.None, out datEndDate)
   )
        {
            updateEventGridviewRecord(id, strEventType, strEventName, datStartDate, datEndDate);
        }

            /*
             || DateTime.TryParseExact(strEndDate, new string[] { "dd/MM/yyyy" },
                               System.Globalization.CultureInfo.InvariantCulture,
                               System.Globalization.DateTimeStyles.None, out datEndDate
             */

        else
        {
            lblError.Visible = true;
            lblError.Text = "Invalid Date";
            lblSuccess.Visible = false;
        }
        UpdateLabels();
    }

    private void updateEventGridviewRecord(int id, string strEventType, string strEventName, DateTime datStartDate, DateTime datEndDate)
    {
        try
        {
            string strConnectionString = ConfigurationManager.ConnectionStrings["ProjectConnectionString"].ConnectionString;
            SqlConnection myConnect = new SqlConnection(strConnectionString);

            string strCommandText = "UPDATE EVENT_ANNOUNCE SET [EVENTTYPE]=@EVENTTYPE, [EVENTNAME]=@EVENTNAME, [STARTDATE]=@STARTDATE, [ENDDATE]=@ENDDATE WHERE [ID]=@ID";

            SqlCommand cmd = new SqlCommand(strCommandText, myConnect);
            cmd.Parameters.AddWithValue("@id", id);
            cmd.Parameters.AddWithValue("@EVENTTYPE", strEventType);
            cmd.Parameters.AddWithValue("@EVENTNAME", strEventName);
            cmd.Parameters.AddWithValue("@STARTDATE", datStartDate);
            cmd.Parameters.AddWithValue("@ENDDATE", datEndDate);
            myConnect.Open();

            int result = cmd.ExecuteNonQuery();

            if (result > 0)
            {
                lblSuccess.Visible = true;
                lblSuccess.Text = "Record updated!";
                lblError.Visible = false;
            }
            else
            {
                lblSuccess.Visible = true;
                lblError.Text = "Update fail";
                lblError.Visible = false;
            }

            myConnect.Close();


            //Cancel Edit Mode
            grdEvent.EditIndex = -1;
            bindEventGridView();
        }

        catch
        {
            lblError.Visible = true;
            lblError.Text = "Please Enter Approximate data";
            lblSuccess.Visible = false;
        }
    }

1 个答案:

答案 0 :(得分:0)

在左侧面板上将标签包装在自己的更新面板中。

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Label ID="LabelEvent1" runat="server" Width="99%" />
<asp:Label ID="LabelEvent2" runat="server" Width="99%" />
<asp:Label ID="LabelEvent3" runat="server" Width="99%" />
   </contenttemplate>
</asp:UpdatePanel>

在你的行删除事件中调用updateLabels方法

 protected void grdEvent_RowDeleted(object sender, GridViewEditEventArgs e)
{
   if(e.Exception == null)
{
    UpdateLabels();
}
}