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

Например, скажем, у меня есть главный экран в форме с сеткой данных со списком компонентов ПК и кнопками для добавления, удаления или изменения компонентов из этого dgv.Я хочу, чтобы пользователь мог выбрать строку из таблицы данных, а затем нажать кнопку «Изменить», после чего откроется форма ModifyComponent, и сведения о выбранном компоненте будут отображены в различных текстовых полях.Итак, я хочу вытащить данные из выбранной строки в форму ModifyComponent.Вот как я пытался это сделать до сих пор.Я создал этот метод в форме MainScreen (индекс строки совпадает со свойством ComponentID в списке привязок компонентов):

 public int getData()
    {
       int component = ComponentsGridView.SelectedRows[0].Index);
       return component;
    } 

А затем в форме ModifyComponent я использую метод lookupComponent из класса Inventoryкоторый берет идентификатор компонента и вытаскивает правильный компонент из списка компонентов:

 Inventory.lookupComponent(MainScreen.getData());

Затем я напишу код, чтобы поместить каждое свойство в правильное текстовое поле, но я получаю ошибку "Ссылка на объекттребуется для нестатического поля, метода или свойства MainScreen.getData ".Какое было бы правильное направление, чтобы исправить это или другой способ решить эту проблему?

1 Ответ

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

Вот один из возможных способов сделать это (в переводе на C #).

Несколько вещей:

  • вы можете разделить только данные между формами, если вам не нужнодоступ ко всем данным.Однако это всего лишь ссылка, так как в любом случае это не будет стоить вам много ресурсов.
  • у вас должен быть DatagridView.Multiselect = False, если вы используете SelectedIndex (0).
  • thisТаким образом, вы также можете использовать функции в родительской форме, то есть вызывать ParentF.ReloadData () после изменения записи, если у вас есть такая функция для перезагрузки данных, установленная как Public .

C #

// Declare In Parent form (outside functions, in the head of class)
public DataTable dt = new DataTable();  // create *public* datatable

// Get data any way you like into datatable
string cmdTextTC = "SELECT TOP 1000 ID, Name, Componet FROM TestTable; ";   
DataSet ds;
ds = DataAccessLayer.GetQueryResultsTC(cmdText);
If ds.Tables.Count > 0 Then
    dt = ds.Tables(0)
End If

// Use it for datagrid
this.DataGridViewComponents.datasource = dt;

// Declare In Child form (outside functions, in the head of class)
public MyParentForm ParentFrm;   // link to parent
public Int32 ComponentID;        // selected component

// When declaring child form in the parent, remember to set some relations
MyChildForm ChildForm; // child form
ChildForm.ParentFrm = this;     // create reference to parent
ChildForm.ComponentID = ComponentsGridView.SelectedRows(O).Index;  // Set Selected ID

// Use data in ChildForm
DataRow dr = ParentFrm.dt.rows(ComponentID);
this.NumericUpDownID.Value = System.Convert.ToInt32(dr("ID"));
this.TextBoxName.Text = System.Convert.ToString(dr("Name"));

Код VB

' Declare In Parent form (outside functions, in the head of class)
Public dt As New DataTable  ' create *public* datatable 

    ' Fill it any way you like (here I use a declared function)
    Dim cmdTextTC As String = "SELECT TOP 1000 ID, Name, Componet FROM TestTable; "
    Dim ds As DataSet
    ds = DataAccessLayer.GetQueryResultsTC(cmdText)
    If ds.Tables.Count > 0 Then
        dt = ds.Tables(0)
    End If

    ' Use it for datagrid
    Me.DataGridViewComponents.datasource = dt

' Declare In Child form (outside functions, in the head of class)
Public ParentFrm As MyParentForm   ' link to parent
Public ComponentID As Int32        ' selected component

' When declaring child form in the parent, remember to set some relations
Dim ChildForm As MyChildForm ' child form
ChildForm.ParentFrm = Me     ' create reference to parent
ChildForm.ComponentID = ComponentsGridView.SelectedRows(O).Index  ' Set Selected ID

' Use data in ChildForm
Dim dr As DataRow = ParentFrm.dt.rows(ComponentID)
Me.NumericUpDownID.Value = CInt(dr("ID"))
Me.TextBoxName.Text = CStr(dr("Name"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...