子窗口关闭WPF时刷新父窗口中的DataGrid

问题描述 投票:0回答:1

您好,我在DataGrid窗口中为Parent双击了鼠标,该事件会打开Child窗口并填充一些TextboxesComboboxes

我也有一个Child窗口关闭窗口事件,该事件保存了对SQL Server数据库所做的更改。

我正在尝试关闭DataGrid窗口后刷新Child。请帮忙!

父窗口数据网格代码:

    public partial class DataGrid_HBD : UserControl
{

    public DataGrid_HBD()
    {
        InitializeComponent();

        SearchButtons_Load();
        DataGridData();


        // 2 Seconds Timer before connecting to the Database.
        // This improves UI rendering on button click
    }

    /// <summary>
    /// Loading Data Grid
    /// </summary>
    public void DataGridData()
    {

            // Attemption to connect to SQL Server database and populate DataGrid with database tables. 
            try
            {
                string connectionString = ("Data Source=WINDOWS-B1AT5HC\\SQLEXPRESS;Initial Catalog=CustomerRelations;Integrated Security=True;");
                SqlConnection connection = new SqlConnection(connectionString);

                // Review SQL queries for security vulnerabilities
                SqlCommand cmd = new SqlCommand("SELECT [hb_Disputes].[DSP_ID], [hb_disputes].[ACCOUNT], [Users].[TX_EMPLOYEE], [hb_CsrNames].[NM_USER], [hb_disputes].[CUST_NAME],[hb_disputes].[PREM_ADDR], [hb_status].[Status], [hb_disputes].[OPENED], [hb_disputes].[DEADLINE], [hb_disputes].[DATERSLVD], [hb_disputes].[PRMCAUSE], [hb_disputes].[RPTTYPE], [hb_ratetype].[RateType], [hb_Disputes].[FR_DT_FIRSTREV], [hb_Disputes].[FR_TS_LATESTUPD], [hb_Disputes].[COMMENT], [hb_Disputes].[FR_DSP_CLSF], [hb_Disputes].[FINADJ], [hb_Disputes].[CALLRSN], [hb_Disputes].[SECCAUSE], [hb_Disputes].[MTR], [hb_Disputes].[SERTYPE], [hb_Disputes].[FR_CUST_CNTCT], [hb_Disputes].[FR_WRK_REQ], [hb_Disputes].[FR_OPN_ERR], [hb_Disputes].[FR_SO_TP], [hb_Disputes].[FR_SO_DTLS], [hb_Disputes].[FR_SO_DT_WNTD], [hb_Disputes].[FR_SO_ISSD_BY], [hb_Disputes].[FR_CMMNT], DATEDIFF(day,[OPENED], [DEADLINE]) AS DaysOpen FROM [hb_disputes]" +
                    " LEFT JOIN [Users] ON [hb_disputes].[ASSGNTO] = [Users].[KY_USER_ID] LEFT JOIN [hb_CsrNames] ON [hb_disputes].[WFMUSER] = [hb_CsrNames].[KY_USER_ID] LEFT JOIN [hb_status] ON [hb_disputes].[STATUS] = [hb_status].[STSID] LEFT JOIN [hb_ratetype] ON [hb_disputes].[REV_CLS] = [hb_ratetype].[RTID] Where [hb_disputes].[STATUS]= 3 AND [Users].[TX_EMPLOYEE] = '" + Environment.UserName + "'", connection);
                // Review SQL queries for security vulnerabilities
                connection.Open();
                DataTable dt = new DataTable();

                dt.Load(cmd.ExecuteReader());
                connection.Close();

                dtGrid.DataContext = dt;

                // Focus in on line 1 of the data grid on UserControl load 
                // So it can be shown in the key information side column

            }
            catch (Exception ex)
            {
                 MessageBox.Show(ex.Message);
            }

    }

    private void dtGrid_MouseDoubleClick(object sender, MouseButtonEventArgs e)
    {

        // User double clicks on DataGrid Row
        // Open new Window
        // Populate selected textboxes with selected datarow
        DataGrid gd = (DataGrid)sender;
        DataRowView row_selected = gd.SelectedItem as DataRowView;

        var windowToOpen = new Window1();

        if (gd != null)
        {
            // Textboxes
            windowToOpen.txt_RowRecrd.Text = row_selected["DSP_ID"].ToString();
            windowToOpen.txt_acctnumber.Text = row_selected["ACCOUNT"].ToString();
            windowToOpen.txt_analyst.Text = row_selected["TX_EMPLOYEE"].ToString();
            windowToOpen.txt_custname.Text = row_selected["CUST_NAME"].ToString();
            windowToOpen.txt_address.Text = row_selected["PREM_ADDR"].ToString();
            windowToOpen.txt_Status.Text = row_selected["Status"].ToString();
            windowToOpen.txt_DaysOpen.Text = row_selected["DaysOpen"].ToString();
            windowToOpen.txt_revcls.Text = row_selected["RateType"].ToString();
            windowToOpen.txt_WFMissuedBy.Text = row_selected["NM_USER"].ToString();
            windowToOpen.txt_ReviewNotes.Text = row_selected["FR_CMMNT"].ToString();
            windowToOpen.txt_ResolutionNotes.Text = row_selected["COMMENT"].ToString();
            windowToOpen.DatePicker_ScheduledFor.Text = row_selected["FR_SO_DT_WNTD"].ToString();



            // Date Open Parse is needed for ShortDate format.
            if (row_selected["OPENED"] != null)
            {
                DateTime dateTime;
                if (DateTime.TryParse(row_selected["OPENED"].ToString(), out dateTime))
                {
                    windowToOpen.txt_opened.Text = dateTime.ToShortDateString();
                }
                else
                {
                    windowToOpen.txt_opened.Text = ""; //assign default value
                }
            }

            // Deadline Parse is needed for ShortDate format.
            if (row_selected["DEADLINE"] != null)
            {
                DateTime dateTime;
                if (DateTime.TryParse(row_selected["DEADLINE"].ToString(), out dateTime))
                {
                    windowToOpen.txt_deadline.Text = dateTime.ToShortDateString();
                }
                else
                {
                    windowToOpen.txt_deadline.Text = ""; //assign default value
                }
            }

            // Date Resolved Parse is needed for ShortDate format.
            if (row_selected["DATERSLVD"] != null)
            {
                DateTime dateTime;
                if (DateTime.TryParse(row_selected["DATERSLVD"].ToString(), out dateTime))
                {
                    windowToOpen.txt_DateResolved.Text = dateTime.ToShortDateString();
                }
                else
                {
                    windowToOpen.txt_DateResolved.Text = ""; //assign default value
                }
            }
            windowToOpen.Show();
        }
        else
        {
            return;
        }

    }

这是我的子窗口中的关闭事件:

        private void Window_HBD_Closing(object sender, System.ComponentModel.CancelEventArgs e)
    {
        SqlConnection con = new SqlConnection("Data Source=WINDOWS-B1AT5HC\\SQLEXPRESS;Initial Catalog=CustomerRelations;Integrated Security=True;");

        try
        {
            SqlCommand cmd = new SqlCommand("UPDATE [hb_Disputes] SET FR_DSP_CLSF=@FR_DSP_CLSF, FR_CUST_CNTCT=@FR_CUST_CNTCT, FR_WRK_REQ=@FR_WRK_REQ, FR_OPN_ERR=@FR_OPN_ERR, FR_SO_TP=@FR_SO_TP, FR_SO_DTLS=@FR_SO_DTLS, FR_CMMNT=@FR_CMMNT, FR_SO_DT_WNTD=@FR_SO_DT_WNTD, FINADJ=@FINADJ, SERTYPE=@SERTYPE, CALLRSN=@CALLRSN, SECCAUSE=@SECCAUSE, MTR=@MTR, RPTTYPE=@RPTTYPE, PRMCAUSE=@PRMCAUSE, COMMENT=@COMMENT, FR_TS_LATESTUPD=@FR_TS_LATESTUPD WHERE DSP_ID=@DSP_ID", con);
            cmd.Parameters.AddWithValue("@DSP_ID", txt_RowRecrd.Text);

            // Second Row
            cmd.Parameters.AddWithValue("@FR_DSP_CLSF", cmb_DisputeClassification.SelectedValue);
            cmd.Parameters.AddWithValue("@FR_CUST_CNTCT", cmb_CustomerContact.SelectedValue);
            cmd.Parameters.AddWithValue("@FR_WRK_REQ", cmb_requestedwork.SelectedValue);
            cmd.Parameters.AddWithValue("@FR_OPN_ERR", cmb_OpenInError.SelectedValue);
            cmd.Parameters.AddWithValue("@FR_SO_TP", cmb_ServiceOrderType.SelectedValue);
            cmd.Parameters.AddWithValue("@FR_SO_DTLS", cmb_ServiceOrderDetails.SelectedValue);
            cmd.Parameters.AddWithValue("@FR_CMMNT", txt_ReviewNotes.Text);
            cmd.Parameters.AddWithValue("@FR_SO_DT_WNTD", DatePicker_ScheduledFor.Text);

            // Third Row
            cmd.Parameters.AddWithValue("@RPTTYPE", cmb_UtilityRptTyp.SelectedValue);
            cmd.Parameters.AddWithValue("@FINADJ", cmb_FinancialAdjustment.SelectedValue);
            cmd.Parameters.AddWithValue("@SERTYPE", cmb_ServiceTypeAdjustment.SelectedValue);
            cmd.Parameters.AddWithValue("@CALLRSN", cmb_InitialCallReason.SelectedValue);
            cmd.Parameters.AddWithValue("@PRMCAUSE", cmb_PrimCause.SelectedValue);
            cmd.Parameters.AddWithValue("@SECCAUSE", cmb_UnderlyingCause.SelectedValue);
            cmd.Parameters.AddWithValue("@MTR", cmb_MeterIssue.SelectedValue);
            cmd.Parameters.AddWithValue("@COMMENT", txt_ResolutionNotes.Text);
            cmd.Parameters.AddWithValue("@FR_TS_LATESTUPD", DateTime.Now);
            //cmd.Parameters.Add("@FR_TS_LATESTUPD", SqlDbType.DateTime).Value = DateTime.UtcNow;



            con.Open();
            cmd.ExecuteNonQuery();
            con.Close();

        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }

    }
wpf datagrid parent-child page-refresh
1个回答
0
投票
您可以通过几种方式执行此操作,在这里我解释两种方式:

    在子窗口中实施自定义事件,例如“ AfterClosingEvent”。该事件将在子窗口的关闭事件中触发,您可以在特定情况下调用它。在主窗口中,为此事件定义一个订户,并根据您的逻辑实现它。
  • 子窗口中的代码:

    public partial class Window1 : Window { public Window1() { InitializeComponent(); } public event EventHandler<string> AfterClosingEvent; private void Window1_OnClosing(object sender, CancelEventArgs e) { // Logic for your database update... this.AfterClosingEvent?.Invoke(this, this.TextBox1.Text); } }

    父窗口中的代码:

    public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void OpenWindow_OnClick(object sender, RoutedEventArgs e) { var windowToOpen = new Window1(); windowToOpen.AfterClosingEvent += (o, s) => { this.TextBlock1.Text = s; }; windowToOpen.Show(); } }

    1. 您实际上不需要在子窗口中实现自定义事件。仅在需要在特定情况下(而不只是在窗口关闭之后)触发事件时,才定义自定义事件。如果需要执行逻辑

      [whenever子窗口正在关闭,则只需订阅父窗口中的Window.Closing事件,如下所示:

      windowToOpen.Closing += (o, args) => {};
  • 我将项目演示留在this站点中。
    © www.soinside.com 2019 - 2024. All rights reserved.