2009-05-21 6 views
1

Ich habe nicht viel mit WinForms getan, also frage mich, ob mir jemand ein wenig Hilfe dabei geben könnte. Ich habe eine DataGridView, die an eine IList <> gebunden ist. Wenn ich einen ausgewählten Datensatz aus der Sammlung löschen (IList <>) Ich erhalte die folgende Ausnahme:DataGridView auf WinForms löst Ausnahme aus, wenn ich einen Datensatz lösche

„System.IndexOutOfRangeException: Index 3 hat keinen Wert“

Ich glaube, meine Bindung ist ein wenig lahm zu . Vielleicht kann mir hier jemand einen Zeiger geben.

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

    } 

Was würde ich tun möchte, ist ein Datensatz löschen und dann die DataGridGridView aktualisieren. Was ist der beste Weg um zu definieren, welche Eigenschaften in den Spalten angezeigt werden sollen?

Vielen Dank!

Antwort

0

Ich mache es so, nicht mit einer DataSource, da ich die Zelle Ausgänge anpassen musste.

myDataGridView.Rows.RemoveAt(rowIndex); 

myDataGridView.Refresh(); sollte zum Auffrischen arbeiten:

// 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); 

zum Löschen, habe ich mit keine Probleme.

+0

Das ist genau das, was ich brauchte Ich habe bereits eine Sammlung mit meinen Objektinstanzen bevölkerte Das hat mir erlaubt, mich direkt an diese Liste zu binden. Perfect .. danke, Sir! – Nick

+0

Kein Problem, ich fand es auch kryptisch, als ich in die Welt der DGV trat, und nachdem ich das Fett weggeräumt hatte, landete ich bei der über dem ich am einfachsten gefunden habe! – GONeale

0

Betrachten sie eine Bindungsquelle (ziehen Sie es aus der Toolbox und stellen Sie die Datenquelle, die Sie den Klassentyp benötigen.

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; } 
} 
Verwandte Themen