Комбо не отображает выбранный элемент и отображается как список элементов - PullRequest
0 голосов
/ 10 апреля 2020
 public void DataGrid_Data()
    {
        // 2 second delay before loading DataGrid
        var timer = new DispatcherTimer { Interval = TimeSpan.FromSeconds(.80) };
        timer.Start();
        timer.Tick += (sender, args) =>
        {
            timer.Stop();

            // 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);

                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_rpttype].[ReportType], [hb_ratetype].[RateType], [hb_Disputes].[FR_DT_FIRSTREV], [hb_Disputes].[FR_TS_LATESTUPD], [hb_Disputes].[COMMENT], [hb_Disputes].[FR_DSP_CLSF], [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] 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_rpttype] ON [hb_disputes].[RPTTYPE] = [hb_rpttype].[RPTID] LEFT JOIN [hb_ratetype] ON [hb_disputes].[REV_CLS] = [hb_ratetype].[RTID]", connection);
                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

                dtGrid.Visibility = Visibility.Visible;
                dtGrid.Focus();
                dtGrid.SelectedIndex = 0;


            }
            catch
            {
                MessageBox.Show("Database connection is not available at this time. Please contact your database administrator ");
            }
        };
    }


    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_opened.Text = row_selected["OPENED"].ToString();
            windowToOpen.txt_deadline.Text = row_selected["DEADLINE"].ToString();
            windowToOpen.txt_DateResolved.Text = row_selected["DATERSLVD"].ToString();
            windowToOpen.txt_revcls.Text = row_selected["RateType"].ToString();
            windowToOpen.txt_WFMissuedBy.Text = row_selected["NM_USER"].ToString();
            windowToOpen.txt_firstreview.Text = row_selected["FR_DT_FIRSTREV"].ToString();
            windowToOpen.txt_Latestupdate.Text = row_selected["FR_TS_LATESTUPD"].ToString();
            windowToOpen.txt_reviewNotes.Text = row_selected["FR_CMMNT"].ToString();
            windowToOpen.txt_ResolutionNotes.Text = row_selected["COMMENT"].ToString();



            // ComboBoxes

            windowToOpen.cmb_UtilityRptTyp.Items.Clear();
            foreach (DataRowView row in dtGrid.SelectedItems)
            {
                windowToOpen.cmb_UtilityRptTyp.Items.Add(row.Row["ReportType"].ToString());
            }

            windowToOpen.Show();
        }
        else
        {
            return;
        }

    }

Код показывает, что моя Datagrid загружается базой данных SQL Server, и при событии двойного щелчка открывается новое окно, и информация о строке Datagrid заполняется в полях текстового поля и поля со списком.

Я пытаюсь отобразить уже выбранный «Тип отчета по утилитам», однако могу только отобразить его в виде элемента со списком со значением windowToOpen.cmb_UtilityRptTyp.Items.Add (row.Row ["ReportType"]. ToString ());

У меня есть некоторый внутренний код, который заполняет это поле со списком, но для события Loaded, которое также извлекается из базы данных SQL Server, но я отключил его для этого примера.

enter image description here

1 Ответ

0 голосов
/ 11 апреля 2020

Вы должны установить свойство SelectedIndex для отображения элемента как выбранного.

Items.Add () возвращает индекс вновь добавленного элемента.

Это означает, (я предполагаю, что из сетки можно выбрать только одну строку), должно хватить следующего:

Изменить:

cmb_UtilityRptTyp.Items.Add("My Report Type");

Кому:

cmb_UtilityRptTyp.SelectedIndex = cmb_UtilityRptTyp.Items.Add("My Report Type");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...