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