Как заполнить комбинированный список в новом окне из двойного щелчка мышью - PullRequest
1 голос
/ 29 марта 2020
     public partial class DataGrid_HBD : UserControl
{

    public DataGrid_HBD()
    {
        InitializeComponent();

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

    /// <summary>
    /// Loading Data Grid
    /// </summary>
    public void DataGrid_Data()
    {
        // 2 second delay before loading DataGrid
        var timer = new DispatcherTimer { Interval = TimeSpan.FromSeconds(5) };
        timer.Start();
        timer.Tick += (sender, args) =>
        {
            timer.Stop();

            // Attempt to connect to SQL Server database and populate DataGrid with database tables. 
            try
            {
                string connectionString = ("Data Source=\\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;
            }
            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.SelectedItem = row_selected["ReportType"].ToString();


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

Когда пользователь дважды щелкает строку в таблице данных, он открывает новое окно и заполняет текстовые поля выбранными ячейками. Тем не менее, он не работает для CombinationBoxes. Я приложил изображение нового окна (Window1), в которое заполняется информация. На рисунке показан код комбинированного списка с заполненной таблицей из базы данных SQL Server.

Window1 Combobox code behind

1 Ответ

1 голос
/ 29 марта 2020

Прежде всего, вы должны установить Datasource из cmb_UtilityRptTyp со списком доступных типов отчетов, таких как:

// Define ReportType Class
class ReportType {  
  public int ID { get; set; }
  public string Title { get; set; }

  public ReportType(int id, string title)
  {  
    ID = id;  
    Title = title;  
  }  
}  

Затем установите DataSource в первой строке dtGrid_MouseDoubleClick:

ReportType[] list = new ReportType[] {  
  new ReportType(1, "Type 1"),  
  new ReportType(2, "Type 2"),  
};  

windowToOpen.cmb_UtilityRptTyp.DataSource = list;  
windowToOpen.cmb_UtilityRptTyp.DisplayMember = "Title";  
windowToOpen.cmb_UtilityRptTyp.ValueMember = "ID"; 

После этого вы должны использовать SelectedText вместо Text в ComboBox, например:

windowToOpen.cmb_UtilityRptTyp.SelectedText = row_selected["RPTTYPE"].ToString();

Кроме того, вы можете использовать SelectedIndex, чтобы найти индекс предмета вы можете IndexOf как это

string rptType = row_selected["RPTTYPE"].ToString();
int index = windowToOpen.cmb_UtilityRptTyp.Items.IndexOf(rptType );
windowToOpen.cmb_UtilityRptTyp.SelectedIndex = index;

или использовать FindStringExact

string rptType = row_selected["RPTTYPE"].ToString();
int index = windowToOpen.cmb_UtilityRptTyp.FindStringExact(rptType );
windowToOpen.cmb_UtilityRptTyp.SelectedIndex = index;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...