C# 选定行更改时,DataGrid获取索引-1没有值
我有一个简单的datagrid,它显示一些列表变量的内容。我有两个与之相关的按钮,一个用于向列表变量添加内容并刷新datagrid,另一个用于删除它并同时刷新 我可以毫无问题地添加对象,但是,如果我更改所选行,我会得到一个错误,说Index-1没有值。不知道为什么 设置datagrid的代码如下所示:C# 选定行更改时,DataGrid获取索引-1没有值,c#,winforms,C#,Winforms,我有一个简单的datagrid,它显示一些列表变量的内容。我有两个与之相关的按钮,一个用于向列表变量添加内容并刷新datagrid,另一个用于删除它并同时刷新 我可以毫无问题地添加对象,但是,如果我更改所选行,我会得到一个错误,说Index-1没有值。不知道为什么 设置datagrid的代码如下所示: allTravellersDataGrid.DataSource = allTravellers; private void addAttendee_Click(object sender, E
allTravellersDataGrid.DataSource = allTravellers;
private void addAttendee_Click(object sender, EventArgs e)
{
if (attendeeName.Text == "" || attendeeSurname.Text == "" || attendeeBirthDate.Text == "" || attendeeIdNumber.Text == "")
{ MessageBox.Show("Not all information regarding the attendee entered"); }
else
{
allTravellers.Add(dt.prepareTraveller(attendeeName.Text, attendeeSurname.Text, attendeeBirthDate.Text, attendeeIdNumber.Text));
allTravellersDataGrid.DataSource = null;
allTravellersDataGrid.DataSource = allTravellers;
allTravellersDataGrid.Refresh();
}
}
我上面提到的列表是AllTravelers在哪里
将内容添加到AllTravelers列表的按钮如下所示:
allTravellersDataGrid.DataSource = allTravellers;
private void addAttendee_Click(object sender, EventArgs e)
{
if (attendeeName.Text == "" || attendeeSurname.Text == "" || attendeeBirthDate.Text == "" || attendeeIdNumber.Text == "")
{ MessageBox.Show("Not all information regarding the attendee entered"); }
else
{
allTravellers.Add(dt.prepareTraveller(attendeeName.Text, attendeeSurname.Text, attendeeBirthDate.Text, attendeeIdNumber.Text));
allTravellersDataGrid.DataSource = null;
allTravellersDataGrid.DataSource = allTravellers;
allTravellersDataGrid.Refresh();
}
}
最后,用于从列表中删除对象的按钮的代码如下所示:
private void removeAttendee_Click(object sender, EventArgs e)
{
traveller travellerToRemove = (traveller)allTravellersDataGrid.CurrentRow.DataBoundItem;
allTravellers.Remove(travellerToRemove);
allTravellersDataGrid.Refresh();
}
这里有没有人能像我一样无助地找出导致索引问题的原因
谢谢。我怀疑当您收到此错误时,您当前未在所选项目上。未选定项的列表控件用“-1”表示该项。在尝试删除某个有效项之前检查它可能会解决您的问题 我还使用了BindingList,不确定它对您有什么影响 采用带有 名为AttendeName的文本框 添加名为addBtn的按钮 删除名为removeBtn的按钮 名为allTravellersDataGrid的网格 这项工作:
using System;
using System.ComponentModel;
using System.Windows.Forms;
using StackOverFlowWinForms.Model;
namespace StackOverFlowWinForms
{
public partial class Form1 : Form
{
private BindingList<Traveller> _allTravellers = new BindingList<Traveller>();
public BindingList<Traveller> allTravellers { get { return _allTravellers; } }
public Form1()
{
InitializeComponent();
allTravellers.Add(new Traveller("Fred"));
allTravellers.Add(new Traveller("George"));
allTravellers.Add(new Traveller("Sam"));
allTravellers.Add(new Traveller("Mary"));
this.allTravellersDataGrid.DataSource = allTravellers;
}
private void addBtn_Click(object sender, EventArgs e)
{
if (attendeeName.Text == "")
{ MessageBox.Show("Not all information regarding the attendee entered"); }
else
{
allTravellers.Add(new Traveller(attendeeName.Text));
}
}
private void removeBtn_Click(object sender, EventArgs e)
{
if (allTravellersDataGrid.CurrentRow != null)
{
Traveller travellerToRemove = (Traveller)allTravellersDataGrid.CurrentRow.DataBoundItem;
allTravellers.Remove(travellerToRemove);
}
}
}
}
using System;
using System.ComponentModel;
namespace StackOverFlowWinForms.Model
{
public class Traveller
{
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
#endregion
private string _attendeeName;
public string attendeeName
{
get
{
return _attendeeName;
}
set
{
_attendeeName = value;
NotifyPropertyChanged("attendeeName");
}
}
public Traveller()
{
this.attendeeName = "Unknown";
}
public Traveller(string name)
{
this.attendeeName = name;
}
}
}
在网格上是否有索引更改事件?如果是,请张贴代码。