ianmark2 Ответов: 1

Как заполнить combobox в новом окне с помощью события двойного щелчка мыши datagrid


У меня есть DataGrid, который заполнен, но база данных SQL Server в моем главном окне. У меня есть событие, которое срабатывает, когда пользователь дважды щелкает по строке, чтобы открыть новое окно (Окно 1) и заполнить текстовые поля и комбо-боксы информацией из строки.

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_DaysOpen.Text = row_selected["DaysOpen"].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

        foreach (DataRowView row in dtGrid.SelectedItems)
        {
            windowToOpen.cmb_UtilityRptTyp.Items.Clear();
            windowToOpen.cmb_UtilityRptTyp.SelectedIndex = windowToOpen.cmb_UtilityRptTyp.Items.Add(row["RPTTYPE"]);
        }

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

}


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

public void txt_UtilityRptTyp_Loaded(object sender, RoutedEventArgs e)
{
    {
        SqlConnection connection = new SqlConnection("Data Source=WINDOWS-B1AT5HC\\SQLEXPRESS;Initial Catalog=CustomerRelations;Integrated Security=True;");

        try
        {
            connection.Open();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }
        try
        {
            SqlDataAdapter Status_data = new SqlDataAdapter("SELECT RPTID, ReportType FROM [hb_RptType]", connection);
            DataSet ds = new DataSet();
            Status_data.Fill(ds, "t");

            cmb_UtilityRptTyp.ItemsSource = ds.Tables["t"].DefaultView;
            cmb_UtilityRptTyp.DisplayMemberPath = "ReportType";
            cmb_UtilityRptTyp.SelectedValuePath = "RPTID";

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


Однако с помощью кода, который я написал
windowToOpen.cmb_UtilityRptTyp.SelectedIndex = windowToOpen.cmb_UtilityRptTyp.Items.Add(row["RPTTYPE"]);
Я смог показать только числовое значение из столбца DataGrid, но не смог правильно привязать его к comobox, чтобы показать текст списка элементов.

Что я уже пробовал:

Я устал использовать
windowToOpen.cmb_UtilityRptTyp.SelectedItem = row_selected["RPTTYPE"].ToString();


<pre>                windowToOpen.cmb_UtilityRptTyp.SelectedValue = row_selected["RPTTYPE"].ToString();

1 Ответов

Рейтинг:
7

RossMW

Вы можете определить открытые переменные или объект, который вы хотите использовать во второй форме, как определить из первой формы. В вашем случае вы можете передать объект (datagridrow) или идентификатор строки из базы данных или несколько значений в зависимости от того, чего вы пытаетесь достичь.

public partial class Form2: Form
{
    public string x;    
   
    public Form2 (string StringFromForm1)
    {
        InitializeComponent();
        x = StringFromForm1;   
    }

    //code to do with value
}

В Форме 1:

Form2 form2 = new Form2("SomeValue");
form2.Show();