我没有用WinForms做过很多,所以我想知道是否有人可以给我一些帮助。我有一个与IList<>绑定的DataGridView。当我从集合中删除所选记录(ILIST<>)时,我得到以下异常:
“System.IndexOutOfRangeException:索引3没有值”
我认为我的绑定也有点蹩脚。所以也许有人可以在这里给我一个指针。
public Form1()
{
InitializeComponent();
empGrid.DataSource = stub.GetAllEmplyees();
empGrid.Columns["FirstName"].Visible = true;
StatusStrip.Text = "Employee Administration";
}
我想要做的是删除记录,然后刷新DataGridGridView。定义要在列中显示哪些属性的最佳方法是什么?
非常感谢!
答案 0 :(得分:0)
我这样做,不使用DataSource,因为我必须自定义单元格输出。
// for inserts
foreach (var item in data)
{
DataGridViewRow newRow = new DataGridViewRow();
newRow.CreateCells(myDataGridView,
your,
data,
for,
each,
cell,
here);
myDataGridView.Rows.Add(newRow);
}
// for updates
myDataGridView.Rows[rowIndex]
.SetValues(cell,data,you,wish,to,change,here);
为了删除,我在使用时遇到了没有问题:
myDataGridView.Rows.RemoveAt(rowIndex);
myDataGridView.Refresh();
应该可用于刷新。
答案 1 :(得分:0)
考虑使用绑定源(将其从工具箱中拖出并将数据源设置为您需要的类类型:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
List<MyClass> list = new List<MyClass>();
private void Form1_Load(object sender, EventArgs e)
{
this.bindingSource1.DataSource = typeof(WindowsFormsApplication1.MyClass);
list.AddRange(new MyClass[] {
new MyClass { Column1 = "1", Column2 = "1" },
new MyClass { Column1 = "2", Column2 = "2" }
});
bindingSource1.DataSource = list;
bindingSource1.Add(new MyClass { Column1 = "3", Column2 = "3" });
}
private void button1_Click(object sender, EventArgs e)
{
//Here you remove rows without taking care of the representation:
bindingSource1.RemoveAt(0);
}
}
class MyClass
{
public string Column1 { get; set; }
public string Column2 { get; set; }
}