Передача данных из столбца в DataGridView в комбинированный список в другой форме - PullRequest
0 голосов
/ 14 декабря 2018

Я бы хотел, чтобы данные из столбца 2 (все строки) в DataGridView были входными данными для комбинированного списка в другой форме.Код ниже, который я попробовал, содержит 2 ошибки comboBox1 не существует в текущем контексте и ссылка на объект требуется для нестатического поля .Ниже приведен мой код.

Форма 1 (с DataGridView и кнопкой)

// put as public string as the DataGridView rows will keep updating
public string data;
public Form1()
{
    InitializeComponent();
}

//button to go Form 2 which contains the combobox
private void Button1_Click(object sender, EventArgs e) 
{
    string data = string.Empty;
    int indexOfYourColumn = 2;

    foreach (DataGridViewRow row in dataGridView1.Rows)
    data = row.Cells[indexOfYourColumn].Value.ToString();

    comboBox1.Items.Add(data);

    this.Hide();
    FormsCollection.Form2.Show();
}

Форма 2 (с комбинированным списком)

//put as public to obtain value from Form 1
public string data; 
public Form 2()
{
    InitializeComponent();
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    comboBox1.Text = Form1.data;

    //not to repeat the value entered if a particular value has been entered
    String s = data;
    if (!comboBox1.Items.Contains(s))
    {
        comboBox1.Items.Add(s);
    }
}

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

Если вы хотите передать набор информации, вам нужно использовать соответствующий тип.Например, List<string> не простая строка.Затем вы создаете или получаете экземпляр второй формы и только после того, как у вас есть экземпляр второй формы, вы можете передать ему коллекцию данных для отображения

private void Button1_Click(object sender, EventArgs e) 
{
    // These is where you store the elements to pass to the Form2 instance
    List<string> data = new List<string>();;

    int indexOfYourColumn = 2;

    // Build the collection from the selected column for each row
    foreach (DataGridViewRow row in dataGridView1.Rows)
        data.Add(row.Cells[indexOfYourColumn].Value.ToString());

    this.Hide();

    // pass your data to the public property of the Form2 instance
    Form2 f = FormsCollection.Form2;
    f.Data = data;
    f.Show();

}

. Как вы можете видеть данные Значение передается второму экземпляру через открытое свойство, и в наборе доступа к этому свойству вы изменяете содержимое внутреннего поля со списком1

private List<string> _data;
public List<string> Data 
{
    get { return _data; }
    set 
    {
        _data = value;

        // This code uses the DataSource property of the combobox
        // combobox1.DataSource = null;
        // combobox1.DataSource = value;

        // This code works directly with the Items collection of the combo
        combobox1.Items.Clear();
        foreach(string s in _data)
            combobox1.Items.Add(s);
    }
}; 

public Form 2()
{
    InitializeComponent();
}
...
0 голосов
/ 14 декабря 2018

Сначала определите открытый параметр для Form2

public String data;

Затем в Form1 при открытии Form2 установите значение данных следующим образом:

Form2 form2 = new Form2();
form2.data = your_form1_data;
form2.Show();

Теперь у вас есть значение данных в Form2.

...