Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Winforms中将项目添加到列表_C#_Winforms_Oop - Fatal编程技术网

C# 在Winforms中将项目添加到列表

C# 在Winforms中将项目添加到列表,c#,winforms,oop,C#,Winforms,Oop,我试图实现一个提交按钮,用户在3个文本框中输入信息,当他们单击提交按钮时,信息被存储到一个列表中,允许我将其添加到我创建的对象中 我试过创建一个临时列表,第一个索引似乎显示得很好,但我真的很难理解如何添加到列表中,以及如何在他们再次单击“提交”时将其保存到下一个索引中 每次单击submit,它都会有争议地存储在第一个索引中 private Fleet boatOne; private Fleet boatTwo; private Fleet boatThree; private Fleet bo

我试图实现一个提交按钮,用户在3个文本框中输入信息,当他们单击提交按钮时,信息被存储到一个列表中,允许我将其添加到我创建的对象中

我试过创建一个临时列表,第一个索引似乎显示得很好,但我真的很难理解如何添加到列表中,以及如何在他们再次单击“提交”时将其保存到下一个索引中

每次单击submit,它都会有争议地存储在第一个索引中

private Fleet boatOne;
private Fleet boatTwo;
private Fleet boatThree;
private Fleet boatFour;     

如果要向列表中添加元素,然后更新DataGridView,则不需要单独的Fleet元素。只有一份名单(车队)

private List myboots=new List();
....
私有void BoatSubmitButton_单击(对象发送者,事件参数e)
{
船队=新船队(BoatNameTextBox.Text、BoatLicenseTextBox.Text、MaximumLoadTextBox.Text;);
我的船。添加(船);
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 = "";
}
public void Form1\u加载(对象发送方,事件参数e)
{
BoatDataGridView.DataSource=新建BindingList();
}
私有void BoatSubmitButton_单击(对象发送者,事件参数e)
{
船队=新船队(BoatNameTextBox.Text、BoatLicenseTextBox.Text、MaximumLoadTextBox.Text;);
BindingList bs=BoatDataGridView.DataSource作为BindingList;
bs.加入(船只);
BoatNameTextBox.Text=”“;
BoatLicenseTextBox.Text=”“;
MaximumLoadTextBox.Text=”“;
}

几乎不需要任何代码(我的意思是你写的代码)就可以做到这一点:

  • 在解决方案资源管理器中右键单击项目
  • 添加新项目
  • 让它成为一个数据集,给它一个合适的名称
  • 在数据集的设计图面上单击鼠标右键,然后选择“添加新”。。数据表
  • 给它命名为舰队(我个人会给它命名为小船,但是……)
  • 右键单击它并添加名称、许可证号等列
  • 保存集合
  • 打开表单设计器
  • 显示“数据源”窗口(查看菜单>>其他窗口>>数据源)
  • 展开datset节点
  • 将Fleet节点拖动到表单设计器中
  • 展开舰队节点
  • 将它的所有子项也拖到窗体设计器中
现在有了文本框和网格,数据绑定到同一数据集。你也有一个菜单栏类型的东西,有一个添加按钮和一些导航器等


运行程序。您可以键入网格单元格或文本框。您可以使用导航按钮或单击网格中的不同行来更改当前行

。然后将第一个震源组对象的内容设置为一些文本框,然后用第二个震源组(与第一个震源组相同)的信息替换文本框内容,最后清除文本框中的所有内容。抱歉,但不清楚你到底想做什么对不起,我的代码看起来像一个完整的意大利面,我想要的是非常简单的,用户输入他们的信息,点击提交按钮,他们输入的信息,被存储到一个不断增长的列表中,我怎么做,我不知道。我希望在单击submit后清除文本框,这有助于直观地显示用户输入已存储。我如何访问Boat1的索引及其名称/最大权重等,并将它们显示在数据网格中?(为愚蠢的问题感到抱歉)@unboundphantom您没有“访问船只并将其放入网格”-您有一个网格,您将其绑定到绑定列表,您将船只放入列表,它们将自动显示在网格中(谷歌数据绑定)列表或绑定列表可以像使用数组一样使用。当您检索船名时,您已经完成了此操作。只需使用bs[0]即可获得第一个舰队object@Steve如何将列添加到绑定列表中?我收到错误
{“无法将任何行添加到没有列的DataGridView控件中。必须先添加列。”}
并给出一个示例
List<Fleet> boatList = new List<Fleet>();
DataTable dt2 = new DataTable();

private Fleet currentBoat;
private int boats = 0;
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 = "";
}
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 = "";
}
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++;
}