2016-03-01 2 views
1

Datagridview находится в Form2, TextBoxes в Form1.Как передать данные datagridview в текстовые поля в другой форме?

Вызвать форму 2 из формы 1 с помощью Show(); где находится dataGridView, а затем передайте эту информацию в текстовые поля в Form1.

Пример кода в Form2:

private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) 
{ 
    Form1 exportar = new Form1(); 
    exportar.textBox1.Text = dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells[0].Value.ToString(); 
    exportar.comboBox1.Text = dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells[1].Value.ToString(); 
    exportar.textBox2.Text = dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells[2].Value.ToString(); 
    exportar.textBox3.Text = dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells[3].Value.ToString(); 
    exportar.textBox4.Text = dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells[4].Value.ToString(); 
    exportar.dateTimePicker1.Text = dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells[5].Value.ToString(); 
    exportar.dateTimePicker2.Text = dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells[6].Value.ToString(); 
    exportar.textBox7.Text = dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells[7].Value.ToString(); 
    exportar.textBox8.Text = dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells[8].Value.ToString(); 
    exportar.textBox9.Text = dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells[9].Value.ToString(); 
    exportar.textBox10.Text = dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells[11].Value.ToString(); 
} 

Это не сработало, но когда я помещаю exportar.Show() передал информацию. Проблема в том, что удваивает форму Form1.

+0

Вы вызываете Form2 из Form1, используя что-то вроде _Form2 f2 = new Form2(); f2.Show(); _? – Steve

+0

Да, я знаю. Вызвать форму 2 с помощью Show(); где находится dataGridView, а затем передайте эту информацию в Form1. – Ale

+0

Тогда ответ ниже от г-на Оливье Жако-Дескомба является правильным. Вы передаете экземпляр Form1 в вызываемый экземпляр Form2. Это позволяет коду внутри Form2 правильно ссылаться на форму, где видны текстовые поля. Вы не должны создавать другой экземпляр Form1 – Steve

ответ

2

Вам нужна ссылка Form1 в Form2. Вы можете передать его в конструктор Form2

private Form1 _form1; 

public Form2 (Form1 form1) 
{ 
    _form1 = form1; 
} 

Вы можете создать и открыть Form2, как это изнутри Form1:

var form2 = new Form2(this); 
form2.ShowDialog(this); 

Для того, чтобы иметь возможность доступа к элементам управления в другой форме, вы должны измените их Modifer на Internal в окне свойств.

, то вы можете установить значение, как это:

var row = dataGridView1.CurrentRow; // This is "the row". 
            // No detour through the index is necessary. 
_form1.textBox1.Text = row.Cells[0].Value.ToString(); 
_form1.comboBox1.Text = row.Cells[1].Value.ToString(); 

Но все становится проще, если вы используете привязки данных. См.: A Detailed Data Binding Tutorial

+0

Большое спасибо! – Ale

0

1.Pass оценивает это как параметр cunstrctor:

public Form2(string text){ 
     Textbox1. text = text; 
} 

и

Form2 f = new Form2("something to send to the form"); 
f.Show(); 

2.Create общественной собственности для Form2:

public string TheText {get{return TextBox1.Text;}; set {textBox1.Text = value;};} 

, а затем из первой формы:

Form2 f = new Form2(); 
f.TheText = "Some text"; 
f.Show(); 
0

Либо передайте данные в конструкторе другой формы, если это обязательно. Или сделайте общедоступный метод доступным в другой форме, которая позволяет вам устанавливать данные отдельно.

E.g.

public void setTextBoxData(String text) { ,etc, etc } 

Вы можете затем вызвать этот метод в своей второй форме, передав требуемое значение из первой формы.

Смежные вопросы