Добавление элементов в список в Winforms - PullRequest
0 голосов
/ 19 октября 2019

Я пытаюсь реализовать кнопку отправки, где пользователь вводит свою информацию в 3 текстовых окнах, и когда они нажимают на кнопку отправки, информация сохраняется в списке, который позволяет мне добавить ее к имеющемуся у меня объекту. создал.

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

Каждый раз, когда я нажимаю на кнопку отправить, он постоянно сохраняется в первом индексе.

private Fleet boatOne;
private Fleet boatTwo;
private Fleet boatThree;
private Fleet boatFour;     
private void BoatSubmitButton_Click(object sender, EventArgs e)
{
    List<string> tempTextBox = new List<string>();
    tempTextBox.Add(BoatNameTextBox.Text);
    tempTextBox.Add(BoatNameTextBox.Text);

    string licenseVariable = BoatLicenseTextBox.Text;
    string intVariable = MaximumLoadTextBox.Text;

    boatOne = new Fleet(tempTextBox[0], licenseVariable, intVariable);
    BoatNameTextBox.Text = boatOne.GetboatName();
    BoatLicenseTextBox.Text = boatOne.GetboatLicense();
    MaximumLoadTextBox.Text = boatOne.GetmaximumLoad();

    boatTwo = new Fleet(tempTextBox[1], licenseVariable, intVariable);
    BoatNameTextBox.Text = boatTwo.GetboatName();
    BoatLicenseTextBox.Text = boatTwo.GetboatLicense();
    MaximumLoadTextBox.Text = boatTwo.GetmaximumLoad();

    BoatNameTextBox.Text = "";
    BoatLicenseTextBox.Text = "";
    MaximumLoadTextBox.Text = "";

Кроме того, когда я нажимаю на кнопкуКнопка отправки. Я не только хочу, чтобы она сохраняла информацию в объекте, но и хочу, чтобы объект правильно отображался в моем DataGridView.

DataTable dt2 = new DataTable();
dt2.Columns.Add("Boat Name");
dt2.Columns.Add("License Number");
dt2.Columns.Add("Maximum Load");

dt2.Rows.Add(new object[] { boatOne.GetboatName(), boatOne.GetboatLicense(), boatOne.GetmaximumLoad() });
dt2.Rows.Add(new object[] { boatTwo.GetboatName(), boatTwo.GetboatLicense(), boatTwo.GetmaximumLoad() });
dt2.Rows.Add(new object[] { boatThree });
dt2.Rows.Add(new object[] { boatFour });
BoatDataGridView.DataSource = dt2;
BoatDataGridView.CellBorderStyle = DataGridViewCellBorderStyle.None;
BoatDataGridView.RowHeadersVisible = false;

BoatDataGridView.AutoResizeColumns();
BoatDataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;

FishDataGridView.AutoResizeColumns();
FishDataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;

Ответы [ 3 ]

1 голос
/ 19 октября 2019

Это можно сделать практически без кода (написанного вами, я имею в виду) вообще:

  • щелкните правой кнопкой мыши свой проект в обозревателе решений
  • добавьте новый элемент
  • сделайте его DataSet, присвойте ему подходящее имя
  • в области дизайна для набора данных, щелкните правой кнопкой мыши и выберите Добавить новый .. DataTable
  • назовите его Fleet (лично я бы назвал егоЛодка, но ..)
  • щелкните правой кнопкой мыши и добавьте столбцы для имени, номера лицензии и т. Д.
  • сохраните набор
  • откройте дизайнер форм
  • показатьОкно источников данных (меню «Просмотр» >> «Другие окна» >> «Источники данных»)
  • развернуть узел набора данных
  • перетащить узел Fleet в конструктор форм
  • развернуть узел флота
  • перетащите все его потомки в конструктор форм

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

Запустите программу. Вы можете ввести либо ячейки сетки, либо текстовые поля. Вы можете использовать навигационные кнопки или щелкать разные строки в сетке, чтобы изменить текущую строку

0 голосов
/ 19 октября 2019
List<Fleet> boatList = new List<Fleet>();
DataTable dt2 = new DataTable();

private Fleet currentBoat;
private int boats = 0;
private void BoatSubmitButton_Click(object sender, EventArgs e)
{

    string licenseVariable = BoatLicenseTextBox.Text;
    string intVariable = MaximumLoadTextBox.Text;

    if (BoatNameTextBox.Text == "")
    {
        MessageBox.Show("Please Input Name", "ERROR", MessageBoxButtons.OK, 
        MessageBoxIcon.Error);
    }
    else
    {
        boatList.Add(new Fleet(BoatNameTextBox.Text, licenseVariable, 
        intVariable));
        currentBoat = boatList[boats];
        dt2.Rows.Add(new object[] { currentBoat.GetboatName(), 
        currentBoat.GetboatLicense(), currentBoat.GetmaximumLoad() });             
    }

    BoatNameTextBox.Text = "";
    BoatLicenseTextBox.Text = "";
    MaximumLoadTextBox.Text = "";
    boats++;
}
0 голосов
/ 19 октября 2019

Если вы хотите добавить элементы в список, а затем обновить DataGridView, то вам не нужны отдельные элементы Fleet. Всего один список (из флота)

private List<Fleet> myBoats = new List<Fleet>();

....
private void BoatSubmitButton_Click(object sender, EventArgs e)
{
    Fleet boat = new Fleet(BoatNameTextBox.Text, BoatLicenseTextBox.Text, MaximumLoadTextBox.Text;);
    myBoats.Add(boat);    
    BoatDataGridView.DataSource = null;
    BoatDataGridView.DataSource = myBoats;

    BoatNameTextBox.Text = "";
    BoatLicenseTextBox.Text = "";
    MaximumLoadTextBox.Text = "";
}

Однако вы можете использовать упрощенный подход, если привязываете свой DataGridView к BindingList вместо простого списка. Объект BindingList имеет возможность автоматически обновлять связанный объект

public void Form1_Load(object sender, EventArgs e)
{
    BoatDataGridView.DataSource = new BindingList<Fleet>();
}
private void BoatSubmitButton_Click(object sender, EventArgs e)
{
    Fleet boat = new Fleet(BoatNameTextBox.Text, BoatLicenseTextBox.Text, MaximumLoadTextBox.Text;);
    BindingList<Fleet> bs = BoatDataGridView.DataSource as BindingList<Fleet>;
    bs.Add(boat);
    BoatNameTextBox.Text = "";
    BoatLicenseTextBox.Text = "";
    MaximumLoadTextBox.Text = "";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...