2009-05-21 1 views
1

Я не много сделал с WinForms, поэтому мне интересно, может ли кто-нибудь помочь мне с этим немного помочь. У меня есть DataGridView, который связан с IList <>. Когда я удалить выбранную запись из коллекции (IList <>) я получаю следующее исключение:DataGridView на WinForms выдает исключение, когда я удаляю запись

«System.IndexOutOfRangeException: Index-не имеет значения»

Я думаю, что мое связывание является немного хромает слишком , Так что, может быть, кто-то может дать мне указатель здесь.

public Form1() 
    { 
     InitializeComponent(); 
     empGrid.DataSource = stub.GetAllEmplyees(); 
     empGrid.Columns["FirstName"].Visible = true; 
     StatusStrip.Text = "Employee Administration"; 

    } 

Что я хотел бы сделать, это удалить запись, а затем обновить DataGridGridView. Каков наилучший способ определить, какие свойства вы хотите отображать в столбцах?

Большое спасибо!

ответ

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(); должен работать для освежения.

+0

Это именно то, что мне нужно у меня уже есть коллекция населенную с моими экземплярами объекта Итак, это позволило мне просто привязать непосредственно к этому списку. Perfect .. спасибо, сэр! – Nick

+0

Нет проблем. Я тоже нашел это загадочным, когда я впервые вступил в мир DGV, поэтому после обрезки жира я закончил с выше которого я нашел простейшим! – GONeale

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; } 
} 
Смежные вопросы