2013-04-11 3 views
1

Я искал много вопросов о том, как это сделать, но ни один из них, похоже, не работает. У меня есть ListView на моем основном представлении, и я заполняю его от добавления данных к нему из другой формы. В другой форме у меня есть пара строк из текстовых полей, которые я хотел бы передать. Вот мой код:Добавить элемент в ListView из другого класса

// Добавить новую форму бронирования:

namespace Booker 
{ 
    public partial class newBookingForm : Form 
{ 
    public newBookingForm() 
    { 
     InitializeComponent(); 
    } 

    private void NewBookingForm_Load(object sender, EventArgs e) 
    { 
     roomField.Focus(); 
    } 

    private void newBookingButton_Click(object sender, EventArgs e) 
    { 
     // Add to ListView 
     // Add to Parse 
     string room = this.roomField.Text; 
     string date = this.datePicker.Value.ToShortDateString(); 
     string time = this.timeField.Text; 
     string person = "<username>"; // Get current Parse user 

     Booker booker = new Booker(); 
     string[] array = new string[4] { room, date, time, person }; 
     booker.UpdatingListView(array); 

     this.Hide(); 
    } 
} 

}

// ListView форма:

namespace Booker 
{ 
public partial class Booker : Form 
{ 
    delegate void MyDelegate(string[] array); 

    public Booker() 
    { 
     InitializeComponent(); 
    } 

    protected override void OnFormClosing(FormClosingEventArgs e) 
    { 
     base.OnFormClosing(e); 
     Environment.Exit(0); 
    } 

    private void Booker_Load(object sender, EventArgs e) 
    { 
     listView.View = View.Details; 
     listView.AllowColumnReorder = false; 
    } 

    /* Methods for the Booker form */ 

    private void newBookingButton_Click(object sender, EventArgs e) 
    { 
     newBookingForm nbf = new newBookingForm(); 
     nbf.Show(); 
    } 

    public void UpdatingListView(string[] array) 
    { 
     if (this.listView.InvokeRequired) 
      this.listView.Invoke(new MyDelegate(UpdatingListView), new object[] { array }); 
     else 
     { 
      ListViewItem lvi = new ListViewItem(array[0]); 
      lvi.SubItems.Add(array[1]); 
      this.listView.Items.Add(lvi); 
     } 
    } 

    private void exitButton_Click(object sender, EventArgs e) 
    { 
     // Error - no action being sent 
    } 

    private void helpButton_Click(object sender, EventArgs e) 
    { 
     // Display help panel 
    } 

    private void contactButton_Click(object sender, EventArgs e) 
    { 
     // Open panel/email 
    } 

    private void newBooking_Click(object sender, EventArgs e) 
    { 
     newBookingButton_Click(sender, e); 

     //string[] row = { "Meeting room", "April 11, 2013", "12:00PM-1:00PM", "Ryan" }; 
     //var listViewItem = new ListViewItem(row); 
     //listView.Items.Add(listViewItem); 
    } 
+0

Вы забыли задать вопрос: – tnw

+0

Кроме того, похоже, вы передаете свой массив в 'UpdatingListView', а затем просто возьмите' array [1] 'и поместите его в' lvi'. Вы ничего не делаете с остальной частью массива, а затем добавляете его в свой 'listView'. Это проблема? Что все в вашем массиве не отображается в вашем 'listView'? – tnw

+0

Проблема заключается в том, что ни одна из данных не вводится в ListView. –

ответ

0

Чтобы добавить элементы из другого класса, просто используйте метод другого класса для добавления из Program. Как это:

// класс мы добавим от:

string name = "Ryan"; 
string site = "imryan.net"; 

string[] array = new string[2] = { name, site }; 
Program.classWithListView.UpdatingListView(array); 

// класс мы добавим к:

public void UpdatingListView(string[] array) 
    { 

     if (this.listView.InvokeRequired) 
     { 
      this.listView.Invoke(new MyDelegate(UpdatingListView), new object[] { array }); 

     } else { 
      ListViewItem lvi = new ListViewItem(array[0]); 
      lvi.SubItems.Add(array[1]); 
      lvi.SubItems.Add(array[2]); 
      this.listView.Items.Add(lvi); 
     } 
    } 

Массив строк будет добавлен к ListView в SubItems ,

1

Попробуйте это в UpdatingListView:

ListViewItem lvi = new ListViewItem(array[0],0); 
lvi.SubItems.Add(array[1]); 
lvi.SubItems.Add(array[2]); 
lvi.SubItems.Add(array[3]); 
this.listView.Items.Add(lvi); 

Это будет творчество e столбец в первой позиции вашего ListView с 4 элементами вашего массива в виде строк в этом столбце.

+0

Нет, не работает. :( –

+0

@ RyanCohen Вы прошли через код и подтвердили, что ваш массив фактически даже содержит что-нибудь? – tnw

+0

Да, я.Я использовал MessageBoxes, чтобы отображать данные в массиве даже из метода UpdatingListView. –

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