Дважды щелкните по строке в datagridview и получите значение определенной ячейки и передайте его в другую форму - PullRequest
0 голосов
/ 14 сентября 2018

Я просто хочу знать, правильный ли приведенный ниже сценарий

Я пытаюсь следующее 1- из MyDataGridView1 в Form1 при двойном нажатии на строку MyDataGridView1 Я получаю значение определенного столбца и передаю его в FORM2

2 - присвоить это значение Textbox на Form2

ниже события, чтобы получить идентификатор от datagridview

private void MyDataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
    {
       vID = MyDataGridView1.Rows[e.RowIndex].Cells[1].Value.ToString();

       this.Close();
       Form2 NewForm = new Form2();
       NewForm.Show();
    }

затем сохраните значение в

public static string vID ;

нет Форма2

Textboxid.Text = F0103.vID ;

в строке ниже, я пытаюсь провести обеденное событие в отпуске textbox, но оно не работает, есть ли идея провести обеденное мероприятие в отпуске

BTN_Refresh.Focus(); 

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

Полный ответ:

Form1:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        List<Stuff> stuff = new List<Stuff>();
        stuff.Add(new Stuff() { Foo = "Foo1", Bar = "Bar1", Data = "Data1" });
        stuff.Add(new Stuff() { Foo = "Foo2", Bar = "Bar2", Data = "Data2" });

        var bindingList = new BindingList<Stuff>(stuff);
        var source = new BindingSource(bindingList, null);
        dataGridView1.DataSource = source;
    }

    private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
    {
        string arg = dataGridView1.Rows[e.RowIndex].Cells[1].Value.ToString();

        Form2 form2 = new Form2(arg);
        form2.Show();

        this.Hide();
    }
}

public class Stuff
{
    public string Foo { get; set; }
    public string Bar { get; set; }
    public string Data { get; set; }
}

Form2:

public partial class Form2 : Form
{
    public Form2(string arg)
    {
        InitializeComponent();

        label1.Text = arg;
    }
}

Одна вещь о winforms (и почему я вместо этого использую WPF) это чрезмерно усложняет этот материал. Из моего тестирования this.Close() закрыл все приложение, и мне пришлось вместо него использовать this.Hide().

Также полезно иметь привычку передавать аргументы вместо установки глобальных переменных. Почти все в C # может быть как-то передано в качестве аргумента, и это делает код лучше и чище.

0 голосов
/ 14 сентября 2018

Если я правильно понимаю ваш вопрос.Вы можете передать строку вашему конструктору Form2.

private void MyDataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
{
  vID = MyDataGridView1.Rows[e.RowIndex].Cells[1].Value.ToString();

  Form2 NewForm = new Form2(vID);

  this.Close();

  NewForm.Show();
}

Затем в конструкторе установите текст TextBox для этой строки.

public class Form2
{
  public Form2(string vid)
  {
    InitializeComponent();

    Textboxid.Text = vid;
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...