2017-02-03 10 views
0

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

Я пытаюсь передать значения из datagridview в список. И затем в новом классе я хочу заставить som методы получить доступ к этому списку. Проблема в том, что когда я передаю datagridview, он возвращает его без содержимого и значений, что означает, что я ничего не могу с этим поделать.

Код в разделе //// ТЕСТИРОВАНИЕ //// работает, как я хочу. Я создаю экземпляр указанного списка и правильно подсчитываю количество строк, см. Скриншот.

public List<vertEl> getVertList = new List<vertEl>(); 

    //Opens the file dialog and assigns file path to Textbox 
    OpenFileDialog browseButton = new OpenFileDialog(); 
    private void browse_Click(object sender, EventArgs e) 
    { 

     browseButton.Filter = "Excel Files |*.xlsx;*.xls;*.xlsm;*.csv"; 
     if (browseButton.ShowDialog() == DialogResult.OK) 
     { 
      //SOME CODE TO GET DATA FROM EXCEL AND SOME METHODS TO CALCULATE 
      //VALUES TO PASS TO THE TAB VERTIKALELEMENTER TAB IN MY DATAGRIDVIEW 
      //VERTIKALELEMENTER IS vertElementerDgv IN MY CODE 

      ////TESTING//// 
      GetVertElementasList TEST = new GetVertElementasList(); 
      getVertList = TEST.vertList(vertElementerDgv); 
      MessageBox.Show(getVertList.Count.ToString()); 


     } 
     else return; 
    } 

теперь я хочу сделать это в отдельном классе и вызвать метод из этого класса, чтобы сделать то же самое, но когда я пытаюсь что с кодом под я не получаю один и тот же счет, что, когда у меня есть код в form1 (публичный частичный класс BridgeGeometry). Он возвращает значение 0. Метод foo() присваивается кнопке 1 в форме.

class GetKoord 
{ 
    public GetVertElementasList getList = new GetVertElementasList(); 

    BridgGeometry obj = new BridgGeometry(); 

    public void foo() 
    { 
     var TEST = getList.vertList(obj.vertElementerDgv); 
     //var TEST = obj.getVertList; 
     MessageBox.Show(TEST.Count.ToString()); 

    } 

} 

Я также пытался получить значения непосредственно из DataGridView, но нет ничего в нем, когда я к нему доступ из класса, который не является классом form1/BridgeGeometry.

Form - screenshot

ответ

0

Основываясь на ссылку I удалось добиться этого. Наверное, это не лучшее решение, а работающее. Я попытался обернуть голову вокруг привязки данных, listbinding и т. Д., Но поскольку класс с входными значениями является грязным, я дал это до сих пор. Входные значения datagriview немного отличаются от списков, а некоторые - от другого datagridview.

MSDN-forum: Accessing Form1 controls from a different class

Пояснения приведены в ссылке, я просто представить, как я сделал это в моей программе.

Если мой класс GetKoord, как это:

public class GetKoord 
    { 
    private BridgGeometry bridgeGeometry; 

    public GetKoord(BridgGeometry form1) 
    { 
     bridgeGeometry = form1; 
    } 

    public List<vertElementerParam> getListvertElementer(List<vertElementerParam> theList) 
    { 
     //var vertElementerDgv = bridgeGeometry.vertElementerDgv; 
     GetVertElementasList getVertElementasList = new GetVertElementasList(); 
     List<vertElementerParam> MyDgvListList = new List<vertElementerParam>(); 
     MyDgvListList = getVertElementasList.vertList(bridgeGeometry.vertElementerDgv); 

     //MessageBox.Show(MyDgvListList.Count.ToString()); 

     theList = MyDgvListList; 
     return theList; 
    } 

    } 

тогда я могу получить список в Button1_Click, как это, проверьте скриншот в первом посте:

public List<vertElementerParam> getVertList = new List<vertElementerParam>(); 

    private void button1_Click(object sender, EventArgs e) 
    { 
    GetKoord getKoord = new GetKoord(this); 
    List<vertElementerParam> testList = new List<vertElementerParam>(); 

    testList = getKoord.getListvertElementer(getVertList); 
    MessageBox.Show(testList.Count.ToString()); 

    } 
0

Вы можете запустить цикл и хранить информацию с выбранных строк в общественном вар с чем-то вроде этого:

  string itemOne = dataGridView1.SelectedRows[0].Cells[1].Value + string.Empty; 
      string itemTwo= dataGridView1.SelectedRows[0].Cells[2].Value + string.Empty; 
      string itemThree = dgMasterGridBun.SelectedRows[0].Cells[3].Value + string.Empty; 

Переменные

  public var varItemOne = itemOne; 
      public var varItemTwo = itemTwo; 
      public var varItemThree = itemThree; 
+0

Пожалуйста, объясните, с помощью этого кода хау это помогает мне получить доступ к моему datagridview из внешнего класса? Проблема заключается не в хранении значений - это доступ к нему в другом классе. – Grohl

+0

Просто теория, но если вы можете вытащить свою информацию из вида сетки данных и сохранить ее как общедоступную переменную, вы должны иметь к ней доступ (я предполагаю, что с помощью геттера и сеттера). Я бы скорее просто прокомментировал и провел мозговой штурм, но мне нужно 50 rep для комментариев lol – Mokey

+0

Или, возможно, сохранить информацию в XML. Проверьте это, возможно, ваш мозг будет тикать. http://stackoverflow.com/questions/26040165/how-i-can-save-a-datagridview-in-a-xml-and-load-a-xml-to-datagridview – Mokey

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

  • Нет связанных вопросов^_^